如何在C++中模拟按住键盘按钮
How to simulate holding down a keyboard button in C++
我正在尝试制作一个可以模拟按住键盘按钮的程序。
这个程序应该在游戏中运行,需要按住 W,A,S,D 等按钮。我在 Grand Theft Auto V 和 Garry 的 Mod 中测试了该程序,但它在其中任何一个中都不起作用。
我尝试使用 SendInput
和 keybd_event
函数来模拟输入,但没有成功。
#include <windows.h>
#define VK_W 0x57
using namespace std;
int main(){
while(1){
keybd_event(VK_W, 0, 0, 0);
Sleep(3000); //should hold W for 3 seconds
keybd_event(VK_W, 0, KEYEVENTF_KEYUP, 0);
Sleep(1000);
}
return 0;
}
我已经使用 Razer 的键盘软件创建了宏,效果非常好,所以必须有一种方法来模拟按键输入。
我还尝试创建一个 AutoHotkey
脚本,它在 Garry 的 Mod 中有效,但在侠盗猎车手 V 中无效:
w::
SendInput {w down}
Sleep 3000
SendInput {w up}
此脚本在按下 W 时保持 W 3 秒。
我尝试在网上搜索,但没有找到任何有效的实现。
编辑:我又搜索了一些,发现了这个:
原来我使用的是 Unicode 而不是结合 KEYEVENTF_SCANCODE
标志的键盘扫描码。 DirectInput 游戏现在可以正确接收击键。
作为参考,因为已经在评论中回答了,所以在填写[=]所需的INPUT
结构时,您必须使用SendInput
而不是SendMessage
10=] 函数确保您将 Flags
与 KEYEVENTF_SCANCODE
结合使用以发送硬件信号而不是虚拟信号。这些将由 DirectInput 处理。
资料来源:Simulating Keyboard with SendInput API in DirectInput applications
我正在尝试制作一个可以模拟按住键盘按钮的程序。
这个程序应该在游戏中运行,需要按住 W,A,S,D 等按钮。我在 Grand Theft Auto V 和 Garry 的 Mod 中测试了该程序,但它在其中任何一个中都不起作用。
我尝试使用 SendInput
和 keybd_event
函数来模拟输入,但没有成功。
#include <windows.h>
#define VK_W 0x57
using namespace std;
int main(){
while(1){
keybd_event(VK_W, 0, 0, 0);
Sleep(3000); //should hold W for 3 seconds
keybd_event(VK_W, 0, KEYEVENTF_KEYUP, 0);
Sleep(1000);
}
return 0;
}
我已经使用 Razer 的键盘软件创建了宏,效果非常好,所以必须有一种方法来模拟按键输入。
我还尝试创建一个 AutoHotkey
脚本,它在 Garry 的 Mod 中有效,但在侠盗猎车手 V 中无效:
w::
SendInput {w down}
Sleep 3000
SendInput {w up}
此脚本在按下 W 时保持 W 3 秒。
我尝试在网上搜索,但没有找到任何有效的实现。
编辑:我又搜索了一些,发现了这个:
原来我使用的是 Unicode 而不是结合 KEYEVENTF_SCANCODE
标志的键盘扫描码。 DirectInput 游戏现在可以正确接收击键。
作为参考,因为已经在评论中回答了,所以在填写[=]所需的INPUT
结构时,您必须使用SendInput
而不是SendMessage
10=] 函数确保您将 Flags
与 KEYEVENTF_SCANCODE
结合使用以发送硬件信号而不是虚拟信号。这些将由 DirectInput 处理。
资料来源:Simulating Keyboard with SendInput API in DirectInput applications