如何在C++中模拟按住键盘按钮
How to simulate holding down a keyboard button in C++
我正在尝试制作一个模拟按住键盘按钮的程序。
该程序应该适用于需要按住 W,A,S,D 等按钮的游戏。我在侠盗猎车手V和Garry's 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's Mod中有效,但在侠盗猎车手V中不起作用:
w::
SendInput {w down}
Sleep 3000
SendInput {w up}
按下 W 时,此脚本保持 W 3 秒钟。
我尝试搜索网络,但没有找到任何有效的实现。
编辑:我搜索了更多,发现这个:https://stackoverflow.com/a/3647975/1587051
事实证明,我使用的是Unicode而不是键盘扫描代码KEYEVENTF_SCANCODE
并结合了标志。直接输入游戏现在可以正确接收击键。
为了参考起见,正如注释中已经回答的那样,您必须使用 SendInput
而不是 SendMessage
,在填充SendInput
功能所需的INPUT
结构时,请确保将Flags
与KEYEVENTF_SCANCODE
相结合以发送硬件信号而不是虚拟信号。这些将由 DirectInput 处理。来源 : 在直接输入应用程序中使用 SendInput API 模拟键盘
相关文章:
- 物理键盘上的触发器按键
- 问:如何使用C++中的按钮从窗口打开窗口
- 如何使用C/C++在MacOSX中获得键盘布局
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- QML按钮点击功能执行顺序
- 当用户超过按钮点击限制时报告
- 函数计算用户按下按钮的频率
- 热键/按钮,根据需要进行编译,但不运行(在F5和Ctrl+Shift+B之间)
- FLTK:按下哪个按钮 - 将数字传递给按钮的回调 (lambda)
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口
- 垂直方向的 Gtk3+ 旋转按钮 (c/c++)
- Qt自定义QPush按钮未显示在布局上
- SDL 操纵杆按钮按下/C++
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- Qt中来自不同功能的按钮引用
- 如何使步进电机运行,直到我按下 Arduino 上的特定键盘按钮
- 按下按钮时,键盘矩阵代码未返回正确的列号
- 如何检查是否按下了特定的按钮(键盘)- c++
- 如何在C++中模拟按住键盘按钮
- 如何在GUI中通过按钮或键盘使QProcess停止