![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отловить момент создания нового окна?
__Ed__ © (2003-07-17 19:33:00)
Вопрос в следующем: Как повесить нечто типа хука на появление в системе нового окна с целью отловить окна определённого класса? Можно конечно несколько раз в секунду сканировать список окон, но это "кривой" вариант. Есть ли более красивое решение?
Suntechnic (2003-07-22 04:48:00) [1]
>__Ed__
Хук нужно ставить обязательно из DLL"ки, или можно обойтись без неё, написав CBTProc внутри своей программы?
Если для всей системы, то обязательноиз dll.
__Ed__ (2003-07-21 11:24:00) [2]
Спасибо за код. Позвольте ещё вопрос, может быть совсем дурацкий, но уж простите - не работал с хуками:
Хук нужно ставить обязательно из DLL"ки, или можно обойтись без неё, написав CBTProc внутри своей программы?
Spawn (2003-07-18 13:57:00) [3]Что то типа этого(Быстренько набросал и ошибки не проверял. Так что если таковые будут исправь):
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;
Axis_of_Evil (2003-07-18 13:37:00) [4]
Win32sdk.hlp -> SetWindowsHookEx -> CBTProc
__Ed__ (2003-07-18 12:06:00) [5]
Где можно посмотреть на мануал по WH_XXXX сообщениям?
ни в стандартном хелпе ни в SDK таких нет...
И если пример кто кинет - буду премного благодарен!!!
DVM (2003-07-17 19:36:00) [6]
Хук WH_CBT и есть самое "красивое" решение. Еще можно WH_SHELL, но это только для топ-левел окон.