如何解决SendInput() 函数在游戏内不起作用 (C++)
我用 C++ 写了一个 AI 来尝试玩游戏 (Puyo Puyo Tetris),为此,我尝试使用 sendinput() 来模拟键盘输入来控制游戏,但由于某种原因,输入不什么都不做我知道输入本身可以工作,因为它们在记事本和浏览器等外部工作。我怀疑这可能是游戏防热的一部分,阻止 sendinput() 函数在游戏内部通过。
这是我的代码:
INPUT input = {0};
input.type = INPUT_KEYBOARD;
input.ki.wVk = VkKeyScanA('a');
sendinput(1,&input,sizeof(input));
Sleep(100);
ZeroMemory(&input,sizeof(input));
input.ki.dwFlags = KEYEVENTF_KEYUP;
Sleep(5);
有谁知道如何解决这个问题?我可以使用 sendinput() 的替代方法吗?谢谢!
解决方法
您使用的样本 SendInput
不正确。
首先,您只发送了一次 keydown 输入,然后当您清除输入 (ZeroMemory
) 时,您也清除了 type
和 ki.wVk
。你甚至没有为SendInput
打电话给KEYEVENTF_KEYUP
。
您只需要将 keydown/up 放在一个 SendInput
中:
INPUT input[2] = { 0 };
input[0].type = input[1].type = INPUT_KEYBOARD;
input[0].ki.wVk = input[1].ki.wVk = VkKeyScanA('a');
input[1].ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(2,input,sizeof(INPUT));
此外,此功能受 UIPI 约束。应用程序只能将输入注入到完整性级别相同或更低的应用程序中。对于这种情况,您需要set UIAccess in the Application Manifest File。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。