|
#1
|
||||
|
||||
Помогите с хуками
Есть DLL в которой пытаюсь реализовать перехватчик нажатия средней кнопки мыши
Код:
function MyHook(Code:integer; wParam, lParam: DWord): DWord; stdcall; var HMenu: TPopupMenu; begin if (wParam=WM_MBUTTONDOWN) then begin ShowMessage('Заработало!'); end; result:=CallNextHookEx(ourHook ,Code, wParam, lParam); end; procedure SetHook; stdcall; export; begin if ourHook = 0 then ourHook:=SetWindowsHookEx(WH_MOUSE, @MyHook, HInstance, 0); end; procedure UnHook; stdcall; export; begin if ourHook <> 0 then UnHookWindowsHookEx(ourHook); ourHook := 0; end; Все нормально работает, при нажатии на среднюю кнопку мыши показывается сообщение и дальше никаких проблем... Но мне вместо сообщения надо показывать popup меню, вот тут и начинается самое интересное... Если заменить Код:
ShowMessage('Заработало!'); Код:
HMenu := TPopupMenu.Create(nil); Код:
function MyHook(Code:integer; wParam, lParam: DWord): DWord; stdcall; var HMenu: TPopupMenu; begin if (wParam=WM_MBUTTONDOWN) then begin HMenu := TPopupMenu.Create(nil); end; result:=CallNextHookEx(ourHook ,Code, wParam, lParam); end; , то... Запускаю свою программу с хуком, щелкаю средней кнопкой мыши в каком-нибудь приложении (например, Mozila Firefox), затем закрываю свою программу и приложение (Mozila) падает с ошибкой. Кто-ть подскажите, с чем это связано и как это побороть?! |
#2
|
|||
|
|||
Ну дык ресурсы освобождать надо. В нужном месте вызови CloseHandle (кажется так). Это первая мысль которая возникла. А дальше надо смотреть что вообще у тебя делается.
|
#3
|
||||
|
||||
Попробуем...
|
#4
|
||||
|
||||
Что-то ничего не выходит - Firefox не выдерживает щелчка средней кнопкой :-) Есть еще какие соображения?
|
#5
|
||||
|
||||
Разобрался!!!!! Сам дурак называется Надо было просто деструктор popup вызвать
|
#6
|
||||
|
||||
Только вот теперь столкнулся с новой проблемой.
Есть форма, по кнопке которой вызывается процедура из dll показывающая каталог приложения - все хорошо. При нажатии средней кнопки мыши в форме процедура тоже срабатывает нормально, а вот если щелчок произошел вне приложения - уже не работает. Никак не разберусь, как можно такое реализовать. Подскажите... (Приложение прилагается) |