Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.25;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.022 c
1-1081147580
СержК
2004-04-05 10:46
2004.04.25
Создание bat файла


1-1081515243
LeShick
2004-04-09 16:54
2004.04.25
Скопировать вчерашний файл


14-1080742667
juiceman
2004-03-31 18:17
2004.04.25
Тоже ищу программу, даже две


3-1080568061
Zelius
2004-03-29 17:47
2004.04.25
Как правильно отвязать TADODataSet от сервера?


7-1077879637
Ozone
2004-02-27 14:00
2004.04.25
модель материнской платы





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