Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.22;
Скачать: CL | DM;

Вниз

Как отловить момент создания нового окна?   Найти похожие ветки 

 
__Ed__   (2003-07-17 19:33) [0]

Вопрос в следующем: Как повесить нечто типа хука на появление в системе нового окна с целью отловить окна определённого класса? Можно конечно несколько раз в секунду сканировать список окон, но это "кривой" вариант. Есть ли более красивое решение?


 
DVM ©   (2003-07-17 19:36) [1]

Хук WH_CBT и есть самое "красивое" решение. Еще можно WH_SHELL, но это только для топ-левел окон.


 
__Ed__   (2003-07-18 12:06) [2]

Где можно посмотреть на мануал по WH_XXXX сообщениям?
ни в стандартном хелпе ни в SDK таких нет...
И если пример кто кинет - буду премного благодарен!!!


 
Axis_of_Evil ©   (2003-07-18 13:37) [3]

Win32sdk.hlp -> SetWindowsHookEx -> CBTProc


 
Spawn ©   (2003-07-18 13:57) [4]

Что то типа этого(Быстренько набросал и ошибки не проверял. Так что если таковые будут исправь):

function CBTProc(code:integer;wParam:word;lParam:longint):longint;stdcall;
var
hDC:THandle;
wndClass:array[0..99] of Char;
begin
if Code<0 then
begin
Result:=CallNextHookEx(HookHandle,Code,wParam,lParam);
Exit;
end;
if (code=HCBT_CREATEWND) then
begin
GetClassName(wParam,wndClass,99);
if wndClass="My_hook_window_class" then
begin
//Делаешь что то
Result:=0;//1
( HookHandle,code,wParam,lParam)
Что то типа этого(Быстренько набросал и ошибки не проверял. Так что если таковые будут исправь):

function CBTProc(code:integer;wParam:word;lParam:longint):longint;stdcall;
var
hDC:THandle;
wndClass:array[0..99] of Char;
begin
if Code<0 then
begin
Result:=CallNextHookEx(HookHandle,Code,wParam,lParam);
Exit;
end;
if (code=HCBT_CREATEWND) then
begin
GetClassName(wParam,wndClass,99);
if wndClass="My_hook_window_class" then
begin
//Делаешь что то
Result:=0;//1
CallNextHookEx(HookHandle,code,wParam,lParam)
end
else
Result:=CallNextHookEx(HookHandle,code,wParam,lParam);
end
else
Result:=CallNextHookEx(HookHandle,code,wParam,lParam);
end;

procedure SetHook; export; stdcall;
begin
HookHandle := SetWindowsHookEx(WH_CBT, @CBTProc, HInstance, 0);
end;

exports
SetHook;


 
__Ed__   (2003-07-21 11:24) [5]

Спасибо за код. Позвольте ещё вопрос, может быть совсем дурацкий, но уж простите - не работал с хуками:

Хук нужно ставить обязательно из DLL"ки, или можно обойтись без неё, написав CBTProc внутри своей программы?


 
Suntechnic ©   (2003-07-22 04:48) [6]

>__Ed__
Хук нужно ставить обязательно из DLL"ки, или можно обойтись без неё, написав CBTProc внутри своей программы?


Если для всей системы, то обязательно из dll.



Страницы: 1 вся ветка

Текущий архив: 2003.09.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.017 c
1-71721
krotik
2003-09-10 15:26
2003.09.22
Цвет компонента


3-71504
Andrew
2003-09-01 09:07
2003.09.22
Отчет для Fox-таблиц. Поле типа N;10;0


1-71607
lex7
2003-09-09 16:52
2003.09.22
программа для создания демонстрашек в виде avi


1-71572
Globus
2003-09-09 21:08
2003.09.22
SOS ! Не работает raise Exception.Create( Сообщение )


14-71945
BizonWar
2003-09-01 17:30
2003.09.22
С Суприма уже весь рунет прикалывается.