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

Вниз

hook: помогите разгадать фокус   Найти похожие ветки 

 
Stanislav_Kopyshev ©   (2004-02-26 12:51) [0]

Помогите, пожалуйста, выяснить причину происходящего. Написал простейшую dll для установки ловушки типа WH_MOUSE. dll экспортирует единственную функцию, которая устанавливает/снимает ловушку. Написал приложение, которое загружает dll и вызывает эту функцию. На WM_LBTNDOWN из dll просто выдается MessageBox. Так вот этот самый MessageBox выскакивает где-то 22 раза ( следующий появляется после закрытия предыдущего (естественно, с помощью клавиатуры) )... Фрагменты кода привожу ниже:

в dll:

//------------------------------------------------------------------------------
function MouseProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;
begin

 if code < 0 then {надо просто вернуть результат вызова CallNextHookEx()}
 begin
   Result:= CallNextHookEx(GlobalData^.MouseHook, code, wParam, lParam);
 end
 else
 begin
   if(code=HC_ACTION)then
   begin
     if(wParam = WM_LBUTTONDOWN)then
     begin
       MessageBox(0, "WM_LBTNDOWN", "!", 0)
     end;
   end;

   Result := CallNextHookEx(GlobalData^.MouseHook, code, wParam, lParam);
 end;
end;

//------------------------------------------------------------------------------
{Процедура установки hook-ов}
procedure hook(switch : Boolean; hMainProg: HWND; dwThreadId:DWORD; setAll: Boolean);stdcall;
begin
 if switch=true then
 begin
   //Устанавливаем hook"и, если они не установлены (switch=true).
   GlobalData^.MouseHook := SetWindowsHookEx(WH_MOUSE, @MouseProc, HInstance, dwThreadId);

   if(GlobalData^.MouseHook = 0)then
   begin
     MessageBox(0, "Ошибка при установке хуков", "!", 0);
   end;
 end
 else
 begin
   //Удаляем hook"и, если они установлены (switch=false).
   if(not UnhookWindowsHookEx(GlobalData^.MouseHook))then
   begin
     MessageBox(0, "Ошибка при удалении хуков", "!", 0);
   end;

 end;
end;

//в приложении

procedure Hook(switch : Boolean; hMainProg: HWND; dwThreadId:DWORD; bAll: Boolean); stdcall; external "hook_dll.dll" name "hook";

...

procedure TForm1.Button1Click(Sender: TObject);
begin
 hook(true,0,0,true);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 hook(false,0,0,true);
end;


 
VMcL ©   (2004-02-26 16:30) [1]

Подозреваю, что у тебя 22 процесса...


 
Stefan   (2004-02-27 19:14) [2]

Дело в том, что когда ты устанавливаешь в системе ловух, эта библиотека (а именно в библиотеке и размещён твой ловух) цепляется ко всем процессам и когда ловится твоё событие, все процессы его вынуждены обработать. Посмотри заголовки твоих MessageBox"ов :)

У меня тоже похожие траблы были. Придумай что-нибудь.


 
Stanislav_Kopyshev ©   (2004-03-04 08:38) [3]

Но вот что интересно. Если заменить MessageBox добавлением записи в текстовый log-файл, то запись добавляется только один раз...



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

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

Наверх




Память: 0.45 MB
Время: 0.058 c
3-1080653121
Miwa
2004-03-30 17:25
2004.04.25
Где найти хелп по IBX?


3-1080805412
LAndreyV
2004-04-01 11:43
2004.04.25
связка SELECT FROM WHERE ORDER BY выдает ошибку!


6-1077910971
ser_ega
2004-02-27 22:42
2004.04.25
Имя компа!!!


6-1077882441
ALeX.B.
2004-02-27 14:47
2004.04.25
Как ускорить работу ICMP из ICS(KOL)?


1-1081341459
Questioner
2004-04-07 16:37
2004.04.25
Изменение стиля окна TWebBrowser..





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