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

Вниз

Глобальный хук WH_MOUSE_LL   Найти похожие ветки 

 
fdooch   (2007-07-30 20:34) [0]

Возникла проблема по работе с глобальными хуками. При выполнении нижеприведённого примера в Windows XP с включенными визуальными стилями мышь "зависает" при нажатиях на кнопках в заголовке окна (свернуть, минимизировать, закрыть). При выполнении аналогичных операций через контекстное системное меню или с помощью горячих клавиш (Alt+F4) задержки не возникает. В других ОС (Win2k, Vista) и в той же XP с выключенными визуальными стилями проблема отсутствует.

В чём заключается проблема и как её можно решить?


var
Hook: HHOOK;

function HookProc(Code: Integer; wParam: WPARAM; lParam: LPARAM): Longint; stdcall;
begin
 if (Code=HC_ACTION) and ((wParam=WM_RBUTTONDOWN) or (wParam=WM_RBUTTONUP))
  then   begin
          if wParam=WM_RBUTTONUP
           then   Windows.Beep(100, 100);
          Result:=HC_SKIP;
          Exit
         end
  else   Result:=CallNextHookEx(Hook, Code, wParam, lParam)
end;

procedure TForm1.FormCreate(Sender: TObject);
const
 WH_MOUSE_LL = 14;
begin
 Hook:=SetWindowsHookEx(WH_MOUSE_LL, @HookProc, HInstance, 0)
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 UnhookWindowsHookEx(Hook)
end;


 
Yanis ©   (2007-07-30 22:30) [1]

Есть такая проблемка. А если в dll реализовать, то баг сохраняется?


 
fdooch   (2007-07-31 11:40) [2]

При реализации хука в dll проблема осталась. Да и вообще, использование dll нежелательно. Переделал исходный код - использую хук в отдельном потоке. Все работает на ура. Кстати, в MSDN написано:

LowLevelMouseProc Function

LRESULT CALLBACK LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam);

nCode
[in] Specifies a code the hook procedure uses to determine how to process the message. If nCode is less than zero, the hook procedure must pass the message to the CallNextHookEx function without further processing and should return the value returned by CallNextHookEx. This parameter can be one of the following values.
HC_ACTION
The wParam and lParam parameters contain information about a mouse message.
wParam
[in] Specifies the identifier of the mouse message. This parameter can be one of the following messages: WM_LBUTTONDOWN, WM_LBUTTONUP, WM_MOUSEMOVE, WM_MOUSEWHEEL, WM_RBUTTONDOWN, or WM_RBUTTONUP.
lParam
[in] Pointer to an MSLLHOOKSTRUCT structure.

У меня (в Windows XP SP2)в параметре wParam (в отличие от утверждения MSDN) передаётся ещё и сообщения от средней и дополнительных клавишей мыши (WM_MBUTTONDOWN, WM_MBUTTONUP, WM_XBUTTONDOWN, WM_XBUTTONUP), что и необходимо для моего приложения. Кто-нибудь в курсе, подобное поведение сохраняется в Win2K? В Vista всё отлично - проверял.



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

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

Наверх




Память: 0.45 MB
Время: 0.04 c
2-1190197924
slavannnov
2007-09-19 14:32
2007.10.14
PChar результат функции из Dll


15-1189588061
iam
2007-09-12 13:07
2007.10.14
Юнит тестирование под .NET


2-1190074315
SerJaNT
2007-09-18 04:11
2007.10.14
PHP и MySQL


2-1190291790
MDSEnterprises
2007-09-20 16:36
2007.10.14
Работа с чужими окнами...


15-1190017546
GeLLeR
2007-09-17 12:25
2007.10.14
Гитара





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