我有一个程序,用pyHook捕捉所有按键,然后运行一些函数。
我注意到过了一段时间(随机持续时间),程序停止接收按键触发器,即使我正在按键?
pyHook不稳定吗?
我不会改变按键的按键,也不会过早按下按键或诸如此类的事情。
我的代码是:
import time
import win32api
import win32con
import pythoncom
import pyHook
import os
import ctypes
def Click(x,y):
win32api.SetCursorPos((x,y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
def DeleteRun(event):
if event.Ascii == 96:
BreakHook()
return False
Click(1250, 741)
time.sleep(0.2)
Click(649,261)
time.sleep(0.2)
Click(651, 348)
time.sleep(0.2)
Click(800, 442)
time.sleep(0.2)
Click(865, 612)
time.sleep(0.2)
Click(25, 744)
time.sleep(3)
Click(25, 744)
time.sleep(1.5)
Click(1112,297)
Click(145,392)
return True
def BreakHook():
ctypes.windll.user32.PostQuitMessage(0)
KeyGrabber = pyHook.HookManager()
KeyGrabber.KeyDown = DeleteRun
KeyGrabber.Hookkeyboard()
pythoncom.PumpMessages()
为什么突然停止工作?
这是非常令人沮丧的,因为进程仍然活跃在我的计算机上,即使我停止了程序通过IDE。在
规格:
python 2.7.2
Windows 7(32)
相似(我敢说一模一样吗?)这里讨论并解决了问题:pyHook + pythoncom stop working after too much keys pressed [Python] 这里:Pyhook stops capturing key events after 6 presses
您可能正在尝试做很多事情,而不是取消事件回调。在
通过HookManager和PumpMessages配置的任何事件函数回调都应该尽快返回。在
当你按下一个键时,Windows会及时通知你事件的发生,但是可能还有其他程序也需要这个事件。您正在事件中执行睡眠调用,但当您睡眠时,Windows正在等待您对此回调的响应。在
我的猜测是,在有一定数量的机会及时返回之后,您的活动注册将被Windows忽略。在
将睡眠命令移到事件之外,并在hookmanager回调之外触发实际的单击睡眠序列。在
编辑:链接/引用:
PyHook API文档是最好的(不幸的是),http://pyhook.sourceforge.net/doc_1.5.0/如果您注意到在事件中可以做的许多事情,那么就很清楚为什么时间是最重要的。Windows想知道如何处理按键(例如),而且按键发生得非常快,所以它想尽快知道。在
理解PyHook是一个非常薄的层,而且大部分功能都是由Windows提供的,所以最好的文档来自MSDNhttp://msdn.microsoft.com/en-us/library/ms632589(v=vs.85).aspx。也可能需要查看一些关于“消息”的信息(这是PumpMessages最终派生的地方)书面文本非常具有描述性,许多常量和值都通过PyHook正确地反映出来,尽管好的代码段不是用Python编写的。在
这里有一个相当直接的消息处理(hookmanager知道如何获得消息,PumpMessages通过它来传递),http://msdn.microsoft.com/en-us/library/ms644927(v=vs.85).aspx
以及
当你给你的睡眠打电话时,你是在挂着你当前的信息,而忽略了其他可能堆积起来的信息。即使你抓到消息并立即返回,Windows也不在乎你如何处理它,只要你在消费。在
相关问题 更多 >
编程相关推荐