这是我的脚本:
import pyHook import pythoncom hookManager = pyHook.HookManager() def onKeyboardEvent(event): if event.KeyID == 113: # F2 #do something# return True hookManager.KeyDown = onKeyboardEvent hookManager.HookKeyboard() pythoncom.PumpMessages()
在键盘事件指定的键,或F2键作为我的脚本后,按下几次,脚本停止工作…
有人知道为什么 或者如何解决?
每次发生这种情况,我必须重新启动脚本,而且我必须在脚本中按下很多键。
也许你可以调用该函数作为一个线程异步执行,将它们添加到你自己的队列或设置一个条件,如果它已经在运行,不会执行,将停止填充这是失败的messagepump。
选项1.这会将函数执行添加到线程队列中:
导入pythoncom,pyHook,线程 lock = threading.Lock() def myFunc(i): lock.acquire()#执行下一个函数,直到前一个完成 #some代码 lock.release() def OnKeyboardEvent(event): keyPressed = chr(event.Ascii) 如果keyPressed =='z': t = threading.Thread(target = myFunc,args =(1,))#added to queue t.start() 返回True hm = pyHook.HookManager() hm.KeyDown = OnKeyboardEvent hm.HookKeyboard() pythoncom.PumpMessages()
选项2,或者如果忙,它将忽略其他处理呼叫:
def myFunc(i): myFunc.isRunning = True #some代码 myFunc.isRunning = False myFunc.isRunning = False def OnKeyboardEvent(event): keyPressed = chr(event.Ascii) 如果keyPressed =='z': 如果不是myFunc.isRunning:#if函数正在执行忽略此调用 t = threading.Thread(target = myFunc,args =(1,)) t.start() 返回True
当然,当你通过捕获异常来添加代码或者线程会被阻塞的时候,你应该小心。