gpt4 book ai didi

c++ - 如何在C++中模拟按住键盘按钮

转载 作者:行者123 更新时间:2023-11-30 03:52:00 24 4
gpt4 key购买 nike

我正在尝试制作一个模拟按住键盘按钮的程序。

这个程序应该在需要按住W,A,S,D等按钮的游戏中运行。我在 Grand Theft Auto V 和 Garry's Mod 中测试了该程序,但它在其中任何一个中都不起作用。

我尝试使用 SendInputkeybd_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 中有效,但在 Grand Theft Auto V 中无效:

w::
SendInput {w down}
Sleep 3000
SendInput {w up}

当按下 W 时,此脚本会保持 W 3 秒。

我尝试在网上搜索,但没有找到任何有效的实现。

编辑:我搜索了更多,发现了这个:https://stackoverflow.com/a/3647975/1587051

原来我使用的是 Unicode 而不是结合了 KEYEVENTF_SCANCODE 标志的键盘扫描码。 DirectInput 游戏现在可以正确接收击键。

最佳答案

作为引用,因为它已经在评论中得到回答,所以在填写INPUT时,您必须使用SendInput而不是SendMessage > SendInput 函数所需的结构确保您将 FlagsKEYEVENTF_SCANCODE 结合使用以发送硬件信号而不是虚拟信号。这些将由 DirectInput 处理。来源:Simulating Keyboard with SendInput API in DirectInput applications

关于c++ - 如何在C++中模拟按住键盘按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30936776/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com