Pyhook + Pythoncom Stop Working After Too Much Keys Pressed [python]
this is my script: import pyHook import pythoncom hookManager = pyHook.HookManager() def onKeyboardEvent(event): if event.KeyID == 113: # F2 #do something# retu
Solution 1:
Maybe you can call the function as a Thread to execute asynchronously, add them to your own queue or set a condition to not execute if it's already running, that will stop filling the messagepump which is that is failing. Option 1. This will add the function execution to the threads queue:
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()
Option 2. or this will ignore other processing calls if it's busy:
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
of course you should be careful when you add code by capturing exceptions or the thread will stay blocked.
Post a Comment for "Pyhook + Pythoncom Stop Working After Too Much Keys Pressed [python]"