【发布时间】:2015-10-21 05:22:46
【问题描述】:
我在使用 win32api 创建输入时遇到了一些问题。我正在创建一个语音识别脚本,它需要在所有情况下都像键盘一样工作(包括全屏游戏等)。除了 win32api 的 keybd_event() 函数之外,我还尝试了其他一些解决方案,但大多数甚至都没有在全屏应用程序中注册。我使用Civilization IV 作为测试程序。 Win32api 的 keybd_event() 函数在游戏中确实有效,但我得到了一些奇怪的结果。我尝试了一些不同的方法:
win32api.keybd_event(win32con.VK_UP, 0, win32con.KEYEVENTF_EXTENDEDKEY, 0)
win32api.Sleep(50)
win32api.keybd_event(win32con.VK_UP, 0, win32con.KEYEVENTF_KEYUP, 0)
无论第二行还是第三行都不起作用。它在记事本等应用程序中正确注册为向上箭头。在 Civilization 中,它正确地注册为向上箭头按键(与下面的下一个解决方案相反),但键永远不会释放,它会尝试永远向上,似乎忽略第三行。
win32api.keybd_event(win32con.VK_UP, 0, 0, 0)
win32api.Sleep(50)
win32api.keybd_event(win32con.VK_UP, 0, win32con.KEYEVENTF_KEYUP, 0)
有一个完全不同的问题。在 Civilization 中,代码尝试按 不是向上箭头键,而是小键盘向上 (8) 键,无论数字锁定是打开还是关闭。
这很奇怪,因为这两个输入在游戏中做了不同的事情:第一个代码块显然是按向上箭头键(但没有放开它),而第二个代码块显然是向上按小键盘 (8)键,即使第一个参数(按下哪个键)是相同的。
第一段代码有什么问题?第二段代码有什么问题?什么是好的解决方案?感谢您的时间和帮助!
【问题讨论】:
标签: python python-2.7 input keyboard pywin32