2010-12-08 3 views
2

나는 pyHook으로 마우스 두 번 클릭을 얻으 려하지만, 대신 한 번의 클릭으로 두 쌍의 항목을 얻습니다. WM_LBUTTONDOWN (0x201) 및 WM_LBUTTONUP (0x202). 나는 WM_LBUTTONDBLCLK (0x203)를 기대하고있다. 나는 무엇을 여기에서 놓치고 있냐? MrZebra 말한다 this post에서 :
마우스를 가져 오기 pyHook으로 더블 클릭

편집 "이것은 (0x203)가 전송 될 경우, 귀하의 창 클래스가 CS_DBLCLKS 클래스 스타일로 만들어야"

import pythoncom, pyHook 

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

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

나는이 힌트를 발견했습니다 : This page은 doubleclicking이 이러한 4 개의 msgs : WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDBLCLK 및 WM_LBUTTONUP을 생성한다는 것을 나타냅니다. 실제로 실제로 처음 두 번 가져옵니다.

나는 재 편집

Win7x64

에 파이썬 2.7 pyHook 1.5.1을 사용하고 있습니다 : 답변 C++/C#을 키보드/마우스 대안을 연결하는대로 내가 생각합니다. 반면, 두 번 클릭 사이의 시간을 평가하는 두 번 클릭 이벤트를 결정하는 함수를 작성하는 것이 일반적인 방법인지는 잘 모르겠습니다.

+0

'hm = pyHook.HookManager()'문 다음에'hm.SubscribeMouseAllButtonsDbl (OnMouseEvent)'를 추가 해보십시오. – martineau

+0

변경 사항을 만들었지 만 더블 클릭은 표시되지 않습니다. 나는 많은 충고를 부탁한다. –

답변

1

WM_LBUTTONDOWNWM_LBUTTONUP없이 WM_LBUTTONDBLCLK을 받고 이유 때문에 MrZebra의 말씀입니다 : 대상 윈도우 클래스의 스타일은 CS_DBLCLKS 스타일을 포함하지 않습니다. 대상 창 클래스의 소스 코드를 수정할 수있는 경우가 아니면 WM_LBUTTONDBLCLK을 수신하지 않습니다. Windows는 항상 두 번 클릭을 두 번의 개별 클릭으로 나누기 때문입니다.

이 문제를 해결하는 유일한 방법은 클릭 사이의 시간을 측정하는 것입니다. 클릭 수가 충분히 빠르면 WM_LBUTTONDBLCLK을받은 것처럼 행동하십시오. Windows에서 더블 클릭 시간을 읽으려면 this을 참조하십시오. 더블 클릭이 50 밀리 초라고 가정하지 마십시오.

+0

고맙습니다. Mr. Sigvardsson –

+0

당신을 환영합니다! –

관련 문제