如何使用pyhook而不是pumpMessages()来使用自己的循环?

时间:2012-04-04 03:47:33

标签: python pyhook

我正在尝试使用pyhooks来检测屏幕上任何位置的鼠标点击。问题是我只能使用PumpMessages()。我希望它在我构建的while循环中运行。有没有办法实现这个/为什么它需要pumpMessages?

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循环。

叹息..

2 个答案:

答案 0 :(得分:14)

仅供将来参考,您可以在while循环中使用pythoncom.PumpWaitingMessages(),因为它不会锁定执行。像这样:

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

答案 1 :(得分:3)

From the pyhook tutorial

  

希望接收全局输入通知的任何应用程序   事件必须有Windows消息泵。

但是,这不一定会阻止您的代码工作。你为什么不发布你想要做的事情,我们可以在你的代码上下文中寻找一种使用消息泵的方法。

您可以解决问题的一种方法是通过PostQuitMessages(原始解决方案here

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