Главная страница
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.026 c
1-71618
Dimich1978
2003-09-09 14:03
2003.09.22
ShellExec


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


9-71454
newuser5
2003-03-22 21:14
2003.09.22
DirectX: пропадают спрайты...


3-71470
Alecs
2003-09-02 12:27
2003.09.22
Работа с ISQL.exe из командной строки


6-71782
Nick
2003-07-21 08:03
2003.09.22
файл на сервере...