Двойной щелчок мышью с помощью pyHook - PullRequest
2 голосов
/ 08 декабря 2010

Я пытаюсь получить двойной клик мыши с помощью pyHook, но вместо этого я получаю две пары записей по одному клику, например. WM_LBUTTONDOWN (0x201) и WM_LBUTTONUP (0x202). Я ожидаю WM_LBUTTONDBLCLK (0x203). Что я здесь пропускаю?

import pythoncom, pyHook

def OnMouseEvent(event):           
    print event.Message, event.Position
    return True

hm = pyHook.HookManager()
hm.MouseAll = OnMouseEvent
hm.HookMouse()
pythoncom.PumpMessages()

Я нашел этот совет: в этом посте MrZebra говорит: «Для отправки этого (0x203) необходимо создать класс вашего окна в стиле класса CS_DBLCLKS»

Редактировать : Эта страница указывает, что двойной щелчок сгенерирует эти 4 сообщения: WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDBLCLK и WM_LBUTTONUP, но я фактически получаю первые два дважды.

Я использую Python 2.7 и pyHook 1.5.1 на Win7x64

ReEdit : Я рассмотрю в качестве ответов альтернативы C ++ / C # Keyboard / Mouse hooks. С другой стороны, я не уверен, является ли обычной практикой создание функций для определения события двойного щелчка, оценивающего время между двумя щелчками.

1 Ответ

1 голос
/ 10 декабря 2010

Причина, по которой вы получаете два WM_LBUTTONDOWN и WM_LBUTTONUP, а не WM_LBUTTONDBLCLK, заключается в том, что говорит MrZebra: стиль класса целевого окна не включает стиль CS_DBLCLKS.Если вы не можете изменить исходный код для целевого класса окна, он никогда не получит WM_LBUTTONDBLCLK, потому что Windows всегда будет разбивать двойной щелчок на два отдельных щелчка.время между кликами.Если щелчки приходят достаточно быстро, действуйте так, как будто вы получили WM_LBUTTONDBLCLK.См. this для считывания времени двойного щелчка в Windows.Не просто предполагайте, что двойной клик составляет 50 мс или что-то в этом роде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...