繁体   English   中英

SendInput() function 在游戏中不起作用(C++)

[英]SendInput() function doesn't work inside game (C++)

我在 C++ 中写了一个 AI 来尝试玩游戏(Puyo Puyo Tetris),为此,我尝试使用 SendInput() 来模拟键盘输入来控制游戏,但由于某种原因,输入不起作用任何事物。 我知道输入本身可以工作,因为它们可以在记事本和浏览器等外部工作。我怀疑这可能是游戏阻止 SendInput() function 进入游戏内部的一部分。

这是我的代码:

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 )时,您还清除了typeki.wVk 而且您甚至没有为KEYEVENTF_KEYUP调用SendInput

您只需要将 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));

此外,此 function 受 UIPI 约束。 仅允许应用程序将输入注入到具有相同或更低完整性级别的应用程序中。 对于这种情况,您需要在 Application Manifest File 中设置 UIAccess

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM