Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.014 c
1-71723
Вован
2003-09-11 15:36
2003.09.22
Как на WinAPI перетаскивать окно за любое место?


1-71574
Wandererr
2003-09-10 10:23
2003.09.22
Встроеный язык в приложения


8-71760
LoMik
2003-05-24 21:57
2003.09.22
Изменить уровень громкости


1-71616
Dr. Well
2003-09-09 14:22
2003.09.22
Создание и удаление объектов


6-71812
leonidus
2003-07-17 00:43
2003.09.22
Подвисание программы при использовании NMHTTP.GET




   Наверх