2010-12-08 4 views
2

J'essaie d'obtenir des doubles clics de souris avec pyHook, mais à la place, je reçois deux paires d'entrées de simples clics, par ex. WM_LBUTTONDOWN (0x201) et WM_LBUTTONUP (0x202). J'attends WM_LBUTTONDBLCLK (0x203). Qu'est-ce que je rate ici?Double clic sur la souris avec pyHook

import pythoncom, pyHook 

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

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

J'ai trouvé cette astuce: Dans this post MrZebra dit: "Ce (0x203) à envoyer, votre classe de fenêtre doit être créé avec le style de classe CS_DBLCLKS"

Modifier: This page indique que le double-clic générera ces 4 msgs: WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDBLCLK et WM_LBUTTONUP, mais je reçois les deux premiers deux fois.

J'utilise Python 2.7 et 1.5.1 pyHook sur Win7x64

remodifier: Je considère que les réponses C++/C# Clavier/souris alternatives crochets. D'un autre côté, je ne suis pas sûr que ce soit une pratique courante de construire des fonctions pour déterminer l'événement de double clic évaluant le temps entre deux clics.

+0

Essayez d'ajouter 'hm.SubscribeMouseAllButtonsDbl (OnMouseEvent)' après l'instruction 'hm = pyHook.HookManager()'. – martineau

+0

J'ai fait les changements mais les doubleclicks ne seront pas visibles. J'appreaciate beaucoup le conseil. –

Répondre

1

La raison pour laquelle vous obtenez deux WM_LBUTTONDOWN et WM_LBUTTONUP et ne WM_LBUTTONDBLCLK est à cause de ce MrZebra dit: le style de classe de fenêtre cible ne comprend pas le style CS_DBLCLKS. Sauf si vous pouvez modifier le code source de la classe de la fenêtre cible, il ne recevra jamais WM_LBUTTONDBLCLK, car Windows claquera toujours les doubles clics en deux clics distincts.

La seule façon de résoudre ce problème est de mesurer la durée entre les clics. Si les clics arrivent assez vite, agissez comme si vous aviez reçu WM_LBUTTONDBLCLK. Voir this pour lire le temps de double-clic sur Windows. Ne supposez pas que les doubles clics sont de 50 ms, ou peu importe.

+0

Merci beaucoup M. Sigvardsson –

+0

De rien! –

Questions connexes