Win32api的keybd_event()函数问题

2024-09-27 07:29:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我在用win32api创建输入时遇到一些问题。我正在创建一个语音识别脚本,它需要像键盘一样在所有环境下工作(包括全屏游戏等)。除了win32api的keybd_event()函数之外,我也尝试过其他一些解决方案,但大多数甚至不在全屏应用程序中注册。我用文明四号作为测试程序。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)

不管第二行还是第三行都不起作用。它正确地注册为向上箭头按下应用程序,如记事本。在文明中,它正确地注册为向上箭头按下(与下面的下一个解决方案相反),但键永远不会释放,它试图永远向上,似乎忽略了第三行。在

^{pr2}$

有一个完全不同的问题。在文明社会中,不管numlock是开还是关,代码都试图按向上箭头键,而是按numpad up(8)键。在

这很奇怪,因为这两个输入在游戏中做了不同的事情:第一个代码块显然是按向上箭头键(但不能松开),第二个代码块显然是按numpad up(8)键,尽管第一个参数(按哪个键)是相同的。在

第一块代码有什么问题?第二段代码怎么了?什么是好的解决方案?谢谢你的时间和帮助!在


Tags: 函数代码event应用程序游戏箭头解决方案vk
1条回答
网友
1楼 · 发布于 2024-09-27 07:29:19

我不确定这到底为什么有效,但随机试验我发现了一个使用位或的解决方案。我部分复制的代码在这里:https://msdn.microsoft.com/en-us/library/windows/desktop/ms646304%28v=vs.85%29.aspx

我的解决方案:

win32api.keybd_event(win32con.VK_UP, 0, win32con.KEYEVENTF_EXTENDEDKEY, 0) #press
win32api.Sleep(50)
win32api.keybd_event(win32con.VK_UP, 0, win32con.KEYEVENTF_EXTENDEDKEY | win32con.KEYEVENTF_KEYUP, 0) #release

我现在将此标记为已接受的答案,因为它是有效的,没有其他答案(我仍然找不到任何好的文档),但如果有人能很好地解释这里到底发生了什么,那就太好了。谢谢!在

相关问题 更多 >

    热门问题