Главная страница
    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.45 MB
Время: 0.01 c
14-71844
fox_19
2003-09-01 00:06
2003.09.22
Врезка кода в файл


8-71757
llyr
2003-05-27 16:34
2003.09.22
как в mediaplayer проверить существование нужного кодека ?


14-71896
DiamondShark
2003-09-04 17:53
2003.09.22
The Assignment


14-71837
Knight
2003-08-31 22:48
2003.09.22
Никто не отвечает, поэтому делаю отдельную ветку...


1-71592
voronkov
2003-09-09 12:22
2003.09.22
Проблема с передачей бинарных данных в DLL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский