Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.47 MB
Время: 0.012 c
1-85523
grifon
2002-09-17 12:08
2002.09.26
Блокировка доступа к файлам


4-85748
nikolo
2002-08-09 12:19
2002.09.26
Как получить список функций и процедур, объявленных в DLL?


1-85538
Pvk2002
2002-09-12 11:17
2002.09.26
Вопрос с System Tray


4-85761
malakai
2002-08-09 18:28
2002.09.26
закрытие всех форм проложения


1-85561
Dim!S
2002-09-13 13:09
2002.09.26
Размер папки