我写了一个程序,捕捉俄罗斯方块上的键盘事件,它是通过一个子进程打开的。不当我只想捕捉事件而不打开俄罗斯方块时,我的键盘处理程序(pyHook)不会捕捉事件:
# open Tetris
#Tetris = subprocess.Popen (["C:\\Program Files (x86)\Tetris\Tetris.exe"])
#start game by sending "F2" key
#for hwnd in get_hwnds_for_pid (Tetris.pid):
#win32gui.PostMessage (hwnd, win32con.WM_KEYDOWN, win32con.VK_F2, 0)
keyH = KeyHandler()
ToneT = ToneTimer()
keyH.setDaemon(True)
ToneT.setDaemon(True)
keyH.start()
ToneT.start()
当使用另一个子进程时,这工作得很好,但我不知道为什么现在卡住了。钥匙处理者拿不到钥匙。你知道吗
class KeyHandler(threading.Thread):
def run(self):
# watch for all keyboard events
KeyHandler.hm.KeyDown = self.OnKeyboardCharEvent
# set the hook
KeyHandler.hm.HookKeyboard()
# activate message pipeline
print "keyboardhooked"
pythoncom.PumpMessages()
print "thisshouldnotbeprinted"
除最后一条语句外,所有语句都会被打印,但不会打印诱发的键,而是当我按下某个键时,应用程序会冻结(我有一个函数,可以捕捉与包含的子进程一起工作的事件…)
我猜在省略子进程时线程有问题。你知道吗
我发现如果我在按下一个键之前切换到另一个GUI窗口,然后按下一个键,键就会被接受并打印keyevents。你知道吗
更准确的信息:这可能与在OpenSesame(实验软件)内部运行脚本有关,因为pyhook通常不会从他的窗口检索键盘响应,而只从gui窗口?!因此,我可能需要寻找一个替代品pyhook在这里?你知道吗
它不工作,因为Qt绕过windows消息循环pyHook依赖于消息循环来运行。你知道吗
从Message Loop in MS Windows
run方法需要有一个循环。线程一旦离开run方法就结束了。你知道吗
或者你根本不必给它分类。你知道吗
相关问题 更多 >
编程相关推荐