gpt4 book ai didi

python - pyHook + pythoncom 在按下太多键后停止工作 [Python]

转载 作者:可可西里 更新时间:2023-11-01 10:09:27 24 4
gpt4 key购买 nike

这是我的脚本:

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 键,被多次按下后,脚本停止工作...

谁知道为什么?或者如何解决?

每次发生这种情况我都必须重新启动脚本,而且我必须在我的脚本中按很多键...

最佳答案

也许您可以将该函数作为线程调用以异步执行,将它们添加到您自己的队列中,或者设置一个条件使其在已经运行时不执行,这将停止填充失败的消息泵。
选项 1。这会将函数执行添加到线程队列中:

    import pythoncom, pyHook, threading    lock = threading.Lock()      def myFunc(i):        lock.acquire() #execute next function until previous has finished        #some code        lock.release()    def OnKeyboardEvent(event):        keyPressed = chr(event.Ascii)        if keyPressed == 'z':            t = threading.Thread(target=myFunc, args=(1,)) #added to queue            t.start()        return True    hm = pyHook.HookManager()    hm.KeyDown = OnKeyboardEvent    hm.HookKeyboard()    pythoncom.PumpMessages()

选项 2。 或者这将在繁忙时忽略其他处理调用:

    def myFunc(i):        myFunc.isRunning = True        #some code        myFunc.isRunning = False    myFunc.isRunning = False    def OnKeyboardEvent(event):        keyPressed = chr(event.Ascii)        if keyPressed == 'z':            if not myFunc.isRunning: #if function is being executed ignore this call                t = threading.Thread(target=myFunc,args=(1,))                t.start()        return True

当然,当您通过捕获异常添加代码时,您应该小心,否则线程将保持阻塞状态。

关于python - pyHook + pythoncom 在按下太多键后停止工作 [Python],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3673769/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com