Главная страница
    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.038 c
14-1123151892
Andy BitOff
2005-08-04 14:38
2005.08.28
Погордимся за наших.


1-1123565156
megabyte-ceercop
2005-08-09 09:25
2005.08.28
X11 Xlib.h


3-1121350756
redlord
2005-07-14 18:19
2005.08.28
sqlconnection + sqldataset


4-1120635877
Хинт
2005-07-06 11:44
2005.08.28
Эмуляция выбора пункта меню в чужом приложении


1-1123550320
Knop
2005-08-09 05:18
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский