Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.09.26;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.09.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.007 c
7-85732
Nimbus
2002-07-11 00:08
2002.09.26
Как программно перерисовать всё содержимое SysTray


1-85602
Ag2002
2002-09-14 12:13
2002.09.26
TreeView


1-85513
AndreyNK
2002-09-17 10:49
2002.09.26
выделение памяти


4-85735
CASU
2002-08-07 15:36
2002.09.26
НУЖНА ИКОНКА ИЗ ОКНА


1-85568
Dima2002
2002-09-04 09:08
2002.09.26
Кто-нибудь видел версию RxLib для DELPHI 7 STUDIO?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский