Почему WH_MOUSE больше не является глобальным? - PullRequest
1 голос
/ 19 июня 2009

У меня есть эта глобальная настройка подключения мыши в DLL, которая следит за жестами мыши.

Все работает отлично, но с набором ловушек для WH_MOUSE_LL, который является низкоуровневым ловушкой и который не должен находиться во внешней инъецируемой DLL.

Как только я переключаюсь - на более подходящую, можно сказать, - кнопку мыши WH_MOUSE, все разваливается. Как только я щелкаю вне моего основного приложения (того, которое устанавливает хук), хук повреждается - :: UnhookWindowsHookEx завершится ошибкой.

Я только нашел этот парень, говорящий на обмене экспертами :

"Нет, по крайней мере, под Windows XP + SVP2 WH_MOUSE не станет глобальным, вы вместо этого должен использовать WH_MOUSE_LL. "

Я правильно установил хуки: в DLL, используя раздел общих данных, отправляю и не отправляю сообщения из процедуры хука.

Почему это изменилось? А почему не документировано? Кто-нибудь сталкивался с этим? Спасибо!

Кстати: я немного переработал популярное приложение StrokeIt , и оно использует комбинацию хуков WH_GETMESSAGE и WH_MOUSE и все еще работает в XP / Vista ...

Ответы [ 2 ]

0 голосов
/ 28 ноября 2009

Не уверен, что это будет лучше в качестве комментария, но здесь: Я считаю, что в соответствии с MSDN WH_MOUSE поддерживается на уровне потоков или глобально.

Как вы сами отметили, есть множество приложений, использующих его.

Так что я предполагаю, что у вашей конкретной реализации глобального WH_MOUSE есть проблема, которую необходимо отладить и устранить. Когда вы говорите, что «крючок поврежден», что именно происходит? Зависает ли подключенное приложение? Не могли бы вы присоединить к приложению отладчик, от которого ожидаются события мыши, и проверить, что действительно приводит к сбоям в вашем хуке?

0 голосов
/ 10 июля 2009

Для меня новость, что глобальный хук WH_MOUSE больше не поддерживается, поскольку у меня есть несколько приложений, которые его используют, и они продолжают работать на XP, Vista и Windows 7.

Как вы настраиваете крючок? Вы должны быть в состоянии сделать SetWindowsHookEx (WH_MOUSE, my_mouse_callback, g_hinstance, NULL).

Единственное, о чем я могу думать, это то, что функция обратного вызова занимает слишком много времени, и в этом случае Windows может удалить ловушку, или она неправильно вызывает CallNextHookEx.

...