Главная страница
    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.037 c
11-1062753303
<Falcon>
2003-09-05 13:15
2004.04.25
Merge в KOLmdvXLGrid - а как навесить на FormOnShow?


4-1077110304
МАКСЮХА
2004-02-18 16:18
2004.04.25
Как использовать CreateProcessAsUser?


14-1080801502
pasha_golub
2004-04-01 10:38
2004.04.25
философия


1-1081516382
Koba
2004-04-09 17:13
2004.04.25
Cannot open file


1-1081617949
Ew
2004-04-10 21:25
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский