Текущий архив: 2002.09.26;
Скачать: CL | DM;
Внизwh_shell hook (абочий, но корявый) Найти похожие ветки
← →
stainer (2002-08-10 02:08) [0]И сново здрасте!
Есть вопрос по поводу хука на создание окон.
Вот пример рабочего хука, который передаёт в мою прогу хендл созданного окна
library hook_dll1;
uses Windows, Messages,sysutils;
var
HOOKHANDLE: HHook = 0; Wnd : Hwnd = 0;
function shellproc(Code, W,L : Integer): LongInt; stdcall;
var
i:integer;
begin
if (Code =HSHELL_WINDOWCREATED)// and (w=HSHELL_WINDOWCREATED)) //говорит о том, что создано окно
then begin
i:= FINDWINDOW(NIL,"BLABLA");//HSHELL_WINDOWCREATED; // помоему i всегда = 1
SendMessage(I, WM_USER+111,0 ,w); // Уведомляем программу об этом.
end;
Result := CallNextHookEx(HookHandle, Code, W,L );
end;
function SetHook: LongBool; stdcall;
begin
HookHandle := SetWindowsHookEx(WH_SHELL, shellproc, HInstance, 0);
Result := HookHandle <> 0 ;
end;
function RemoveHook: LongBool; stdcall;
begin
Result := UnHookWindowsHookEx(HookHandle) ;end;
exports
SetHook, RemoveHook; //экспортируемые функции
begin
end.
Но вот в чём проблема:
этот хук реагирует только на окна верхнего уровня (то есть не работает на окна типа open/save dialog)
А мне нужно получить хендл созданного диалога/
Что делать как решить проблему????????????????????????
Спасибо.
← →
@leksey (2002-08-10 11:55) [1]Я не знаю, какую конечную цель ты ставишь перед собой??? Но догадываюсь... Давным-давно, когда я только начинал писать проги, тоже хотел знать, когда появится на экране нужное мне окно.. Хук это прикольно... Но я брал активное окно смотрел на его заголовок (Caption) и если это было окно SaveAs я его закрывал... (Хук можешь поставить на активацию окна, все стальные методы притормаживают винду, даже фоновый режим) Вот так было в каменном веке. А вообще я думаю, ты не то ловишь (HSHELL_WINDOWCREATED) Попробуй отловить и записать все сообщение которые приходят при открытии таких окон, а потом проанализируй каждое из них. Удачи.
← →
Юрий Зотов (2002-08-10 13:33) [2]Во-первых, этот хук будет правильно работать только тогда, когда активна установившая его программа. Если же активна любая другая, вызов CallNextHookEx приведет к ошибке (которая может проявляться, а может и нет, но она все равно имеется). По этому поводу советую прочитать статью Алексея Павлова на этом сайте.
Во-вторых, а что же Вы хотели? Хуки WH_SHELL и не должны отлавливать создание диалоговых окон, в справке об этом прямо сказано - "A top-level, unowned window has been created". Видимо, надо ставить хук WH_CALLWNDPROC и ловить WM_CREATE.
Страницы: 1 вся ветка
Текущий архив: 2002.09.26;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.012 c