2012-04-04 7 views
5

pyhooks를 사용하여 화면의 마우스 클릭을 감지하려고합니다. 문제는 PumpMessages()에서만 작동하도록 할 수 있다는 것입니다. 나는 내가 만든 루프의 내부에서 작동하고 싶습니다. 이것을 달성 할 수있는 방법이 있습니까/왜 pumpMessages가 필요합니까?pumpMessages() 대신 pyhook에 내 루프를 사용하려면 어떻게해야합니까?

def onclick(event): 
    print 'Mouse click!' 
    return True 


hm = pyHook.HookManager() 

hm.MouseLeftDown = onclick 

hm.HookMouse() 
pythoncom.PumpMessages() 
hm.UnhookMouse() 

위의 방법 만 실행하면됩니다.

나는 이런 식으로 뭔가를 달성하기 위해 노력하고있어 :

sTime = time.time() 

def onclick(event): 
    global sTime 
    print 'Time between clicks equals: %i' % time.time() - stime 
    sTime = time.time() 
    return True 

hm.MouseLeftDown = OnClick 

while True: 

    hm.HookMouse() 

편집 : 나는 똑똑한 사람이 아니다. 시나리오에서 while 루프가 필요 ..

한숨 ..

답변

3

From the pyhook tutorial 없습니다 :

글로벌 입력의 알림을 수신하고자하는 모든 응용 프로그램은 Windows 메시지 펌프가 있어야합니다 이벤트 .

그러나 코드가 작동하지 않아도됩니다. 왜 당신이하려는 일을 게시하지 않는가? 그리고 코드의 문맥에서 메시지 펌프를 사용하는 방법을 찾을 수있다. 당신이 당신의 문제를 해결할 수있을

한 가지 방법은 (원래 솔루션 here)는 실행을 고정하지 않기 때문에

import ctypes 
ctypes.windll.user32.PostQuitMessage(0) 
13

그냥 나중에 참조 할 수 있도록, 당신은, while 루프 내부에 pythoncom.PumpWaitingMessages()을 사용할 수 있습니다 PostQuitMessages 통해 . 다음과 같은 내용 :

while True: 
    # your code here 
    pythoncom.PumpWaitingMessages() 
+3

옳은 대답은 – Muppet

+3

Muppet과 동의합니다. 이것은 정답이어야합니다. 덕분에 나는이 간단한 솔루션을 찾기 전에 꽤 오래 검색했지만 – SeanDav

+0

이 아니기 때문에 CPU를 호깅하지는 않습니까? –

관련 문제