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

Вниз

Проблема с остановкой хука!!   Найти похожие ветки 

 
grigory ©   (2005-07-11 17:41) [0]

Привет всем! Проблема следующая..нужно в определенном месте снять хук, а затем после выполнения процедуры вновь его запустить! Вот у меня даже снять не получается. Прошу помогите..вод часть кода

function SysMsgProc(Code: Integer; WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall;
var f:textfile;
  windtext:array [0..255] of char;
  filedir,str:string;
begin
 result:=callnexthookex(syshook,code,wparam,lparam);
 case code of
 HCBT_DESTROYWND: begin
   str:="";
   wnd:=wparam;
   if wnd<>0 then getwindowtext(wnd,windtext,255);
   str:=windtext;
   if length (str)>0 then
     if StrPos(Pchar(str),Pchar("Outlook"))<>nil then
            if (StrPos(Pchar(str),Pchar("Down"))<>nil) or
               (StrPos(Pchar(str),Pchar("Завершение"))<>nil) then begin
             RunStopHook(false);
             OIK; {!!!! - процедура подсоединения к базе и считывания данных}
             RunStopHook(true)
       end;
 end;
 end;
end;

function runstophook(hook:boolean;):boolean; export;stdcall;
begin
 Result:=false;
 if Hook and (SysHook=0) then begin
   syshook:=setwindowshookex(wh_cbt,@sysmsgproc,hinstance,0);
   Result:=(SysHook<>0);
 end
 else if (hook=false) and (SysHook<>0) then begin
   UnhookWindowsHookEx(SysHook);
   SysHook:=0;
   Result:=true;
 end;
end;


здесь во-первых внутри функции-фильтра sysmsgproc вызов функции runstophook невозможен,т.к. она описана позже..ставить forward как-то не хочется. Да и вобще правильно ли из функции-фильтра вызывать runstophook? Вобщем совсем запутался и не знаю как снять хук:( если не снять то происходит зацикливание и процедура ОИК выполняется бесконечное количество раз.


 
Eraser ©   (2005-07-11 18:00) [1]

grigory ©   (11.07.05 17:41)
Да и вобще правильно ли из функции-фильтра вызывать runstophook?


Нет, т.к. обычный хук выполняется в контексте потока в который он в данный момент внедрён. Используй для коммуникации с "главным" потоком сообщения, для того чтобы снять хук из потока, который его установил.


 
grigory ©   (2005-07-11 18:04) [2]

Я на эту тему уже думал..наверно мне не хватает знаний. Можно конкретный пример для моего случая..или для другого..неважно.


 
Eraser ©   (2005-07-11 18:14) [3]

grigory ©   (11.07.05 18:04) [2]

Примера нету, советую почитать http://rsdn.ru/article/baseserv/winhooks.xml


 
grigory ©   (2005-07-12 17:14) [4]

Да с этим я вроде разобрался, но вот с сообщениями в осноне приложение...:(
 SendMessage(handle, WM_DESTROY, ParamW, Code);
 где code = HCBT_DESTROYWND
 handle - дискриптор главного приложения, переданный при вызове длл..а вот как обработать это в основной проге?
и что передается в данном случае в ParamW?

Procedure TMainForm.WMDestroy(var Message: TMessage);
Begin
 runstophook(false)
End;


 
Eraser ©   (2005-07-12 18:33) [5]

grigory ©   (12.07.05 17:14) [4]

WM_DESTROY + F1 - никаких параметров там не передаётся.

А зачем из ловушке посылать приложению сообщения о закрытии окна???



Страницы: 1 вся ветка

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

Наверх




Память: 0.46 MB
Время: 0.045 c
4-1120806372
flying home
2005-07-08 11:06
2005.08.28
сильная задержка времени


1-1123408733
Senti
2005-08-07 13:58
2005.08.28
Помогите новичку. Как массивы символов складывать....


4-1121086642
NeoMaster
2005-07-11 16:57
2005.08.28
Параматры Service Application


9-1115410135
AlterEgo of WondeRu
2005-05-07 00:08
2005.08.28
OpenGL. При уменьшении изображения пропадают линии


1-1123180138
rlz
2005-08-04 22:28
2005.08.28
Нужна помощь





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