Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.07.2009, 12:06
Аватар для Alxd
Alxd Alxd вне форума
Прохожий
 
Регистрация: 19.05.2009
Сообщения: 23
Репутация: 10
Восклицание Помогите с хуками

Есть 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  
Старый 20.07.2009, 15:40
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,057
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну дык ресурсы освобождать надо. В нужном месте вызови CloseHandle (кажется так). Это первая мысль которая возникла. А дальше надо смотреть что вообще у тебя делается.
Ответить с цитированием
  #3  
Старый 20.07.2009, 20:29
Аватар для Alxd
Alxd Alxd вне форума
Прохожий
 
Регистрация: 19.05.2009
Сообщения: 23
Репутация: 10
По умолчанию

Попробуем...
Ответить с цитированием
  #4  
Старый 21.07.2009, 08:43
Аватар для Alxd
Alxd Alxd вне форума
Прохожий
 
Регистрация: 19.05.2009
Сообщения: 23
Репутация: 10
По умолчанию

Что-то ничего не выходит - Firefox не выдерживает щелчка средней кнопкой :-) Есть еще какие соображения?
Ответить с цитированием
  #5  
Старый 21.07.2009, 08:51
Аватар для Alxd
Alxd Alxd вне форума
Прохожий
 
Регистрация: 19.05.2009
Сообщения: 23
Репутация: 10
По умолчанию

Разобрался!!!!! Сам дурак называется Надо было просто деструктор popup вызвать
Ответить с цитированием
  #6  
Старый 21.07.2009, 11:11
Аватар для Alxd
Alxd Alxd вне форума
Прохожий
 
Регистрация: 19.05.2009
Сообщения: 23
Репутация: 10
По умолчанию

Только вот теперь столкнулся с новой проблемой.
Есть форма, по кнопке которой вызывается процедура из dll показывающая каталог приложения - все хорошо. При нажатии средней кнопки мыши в форме процедура тоже срабатывает нормально, а вот если щелчок произошел вне приложения - уже не работает.
Никак не разберусь, как можно такое реализовать. Подскажите...

(Приложение прилагается)
Вложения
Тип файла: zip TestDLL.zip (18.7 Кбайт, 2 просмотров)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:13.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter