我想能够使用一个程序/脚本自动发送键盘控制到一个非常简单的视频游戏。只有3个按钮需要工作,他们可以是任何3个键盘按钮(键绑定可以在游戏中更改)。控制基本上是左,右,射击。在
我尝试过的事情:
Python:keybd_事件
发送密钥
发送输入
C++:使用wVk发送输入
在KEYEVENTF_SCANCODE标志打开的情况下,发送输入直接向wScan输入十六进制扫描代码
使用MapVirtualKey为wScan转换字符的SendInput(KEYEVENTF_SCANCODE flag on)
我在谷歌上搜索过这个问题,几乎所有人都指出了上述方法。它们都能很好地将文本输入到记事本或其他文本输入中(例如,向上箭头在命令提示符下很好地工作,可以启动最后一个命令输入)。他们也能很好地将角色发送到游戏中,你可以把你的名字放在高分榜上。在
我也可以成功地发送F12,而游戏正在运行(这将打开和关闭声音)。这至少表明,在实际的游戏中,它接收键盘命令,并且显然正确地解释了它们。在
我做不到的只是简单的动作指令(左、右、射击——这是简单游戏真正拥有的唯一命令)。我尝试过在游戏中设置箭头键(默认)和'a'、'd'、'w'的命令,并用其他应用程序验证这些命令正在被发送,以及(在字母键的情况下)游戏本身的高分输入屏幕。但在实际的游戏中它并没有注册它们。在
我可以使用屏幕上的键盘从辅助功能菜单发送击键来玩游戏。如果这能奏效,似乎必须有某种方法来完成这个看似简单的任务,但我完全不知所措,搜索结果充斥着破碎的建议(上面列出的方法)。在
有人能给我指出一个可行的方向,而不是上面列出的那些我已经尝试过的方法吗?所有类似问题的答案似乎都暗示了这一点?在
如果有一种方法可以直接从Python实现这一点,那将是理想的,但是如果真的需要,我可以处理其他语言。在
快速代码片段,例如:#include
int main()
{
INPUT ip;
// Time to focus the program
Sleep(5000);
ip.type = INPUT_keyboard;
ip.ki.dwFlags = KEYEVENTF_SCANCODE;
//'w'
ip.ki.wScan = 0x11;
SendInput(1, &ip, sizeof(INPUT));
ip.ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP;
SendInput(1, &ip, sizeof(INPUT));
return 0;
}
这个简单的程序会在5秒后,在记事本上输入字母'w'(或者cmd或者你浏览器的地址栏或者其他什么-任何文本输入都可以)现在,在游戏中,如果我把shoot设置为'w',它就可以正常工作了。如果我用屏幕上的键盘按“w”键,就可以了。但上述程序不会导致“射击”动作在游戏中发生。
但是,如果我将扫描码改为0x58('F12'),程序将适当地使声音在游戏中响起,就像我在实际键盘上按了F12一样。在