Python 以编程方式将键盘输入发送到Windows中的图形应用程序(游戏)
我想能够使用程序/脚本自动发送键盘控制到一个非常简单的视频游戏。只有3个按钮需要工作,它们可以是任意3个键盘按钮(键绑定可以在游戏中更改)。控制基本上是左,右,射击 我尝试过的事情: Python:Python 以编程方式将键盘输入发送到Windows中的图形应用程序(游戏),python,c++,windows,input,automation,Python,C++,Windows,Input,Automation,我想能够使用程序/脚本自动发送键盘控制到一个非常简单的视频游戏。只有3个按钮需要工作,它们可以是任意3个键盘按钮(键绑定可以在游戏中更改)。控制基本上是左,右,射击 我尝试过的事情: Python: keybd_事件 发送键 发送输入 C++: 使用wVk发送输入 SendInput直接将十六进制扫描代码输入到wScan,且KeyEventFu扫描代码标志处于打开状态 SendInput使用MapVirtualKey转换wScan的字符(KEYEVENTF_扫描码标志打开) 几乎无论我用
- keybd_事件
- 发送键
- 发送输入
- 使用wVk发送输入
- SendInput直接将十六进制扫描代码输入到wScan,且KeyEventFu扫描代码标志处于打开状态
- SendInput使用MapVirtualKey转换wScan的字符(KEYEVENTF_扫描码标志打开)
#include <windows.h>
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;
}
#包括
int main()
{
输入ip;
//是时候关注节目了
睡眠(5000);
ip.type=输入\键盘;
ip.ki.dwFlags=KEYEVENTF_扫描码;
//“w”
ip.ki.wScan=0x11;
SendInput(1,&ip,sizeof(INPUT));
ip.ki.dwFlags=KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP;
SendInput(1,&ip,sizeof(INPUT));
返回0;
}
这个简单的程序将在5秒钟后,在记事本(或cmd或浏览器的地址栏或其他任何东西)中键入字母“w”——任何文本输入似乎都可以正常工作。现在,在游戏中,如果我将“射击”设置为“w”,它就可以正常工作。如果我使用屏幕上的键盘并在那里按“w”,它就会工作。但上述程序不会导致游戏中出现“射击”动作。
但是,如果我将扫描码更改为0x58(“F12”),程序将在游戏中适当地发出声音,就像我在实际键盘上按F12一样。问题似乎在于,虽然文本输入通常会从缓冲区提取输入,实时游戏会错过虚拟键盘可以快速按下的按键。解决方案就是在按键和按键之间添加一个对Sleep()的短调用
此外,对于像我这样使用Python的人,如果他们尝试了经常建议的SendKeys.py,但没有成功,请在代码中查找“playkeys”函数并添加time.sleep(暂停)在按下键(vk)后,这应该可以解决问题(它对我有效)。getAsyncKeyState()在C++中可能会工作,虽然你不是很清楚你在问什么……当然不是我要找的,对不起。我不知道怎样才能解释得更清楚。我正在尝试在Windows上自动将键盘输入发送到一个简单的街机游戏。我想要一个可以,例如,为我键入“w”的程序。我发现很多方法(上面列出的)在简单的文本输入区域中都能很好地做到这一点,但在图形游戏中却不行。所有其他类似的问题似乎都遇到了与我相同的问题,收到了相同的(不起作用)建议,然后沉默而没有解决。你可以试试这个