SendInput()函数不使用';t在游戏中工作(C+;+;) 我在C++中写了一个AI来尝试玩一个游戏(PuyPuyoToRIIS),为了做到这一点,我尝试使用SDENDIN()来模拟键盘输入来控制游戏,但是出于某些原因,输入没有做任何事情。我知道输入本身可以工作,因为它们在记事本和浏览器等外部工作。我怀疑这可能是游戏阻止SendInput()函数在游戏内部运行的一部分

SendInput()函数不使用';t在游戏中工作(C+;+;) 我在C++中写了一个AI来尝试玩一个游戏(PuyPuyoToRIIS),为了做到这一点,我尝试使用SDENDIN()来模拟键盘输入来控制游戏,但是出于某些原因,输入没有做任何事情。我知道输入本身可以工作,因为它们在记事本和浏览器等外部工作。我怀疑这可能是游戏阻止SendInput()函数在游戏内部运行的一部分,c++,winapi,artificial-intelligence,sendinput,C++,Winapi,Artificial Intelligence,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); 有人知道如何克服这个问题吗?我是

这是我的密码:

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
不正确

首先,只发送一次按键输入,然后在清除输入(
ZeroMemory
)时,也会清除
类型和
ki.wVk
。您甚至没有为
KEYEVENTF\u KEYUP
调用
SendInput

您只需在一个
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约束。应用程序只允许将输入注入到具有相同或更低完整性级别的应用程序中。对于这种情况,您需要。

您需要消除用户界面特权隔离(UIPI)这一问题的原因。另请参见“…此函数[SendInput]在被UIPI阻止时失败。请注意,GetLastError和返回值都不会表明失败是由UIPI阻止引起的…”嗯,有没有办法绕过它?我不知道,它甚至可能不是问题的真正原因。这不是使用SendInput的方式。不要在第一个参数中发送1。以数组的形式对它们进行批处理。不过,游戏可能不想作弊。这里有数千篇关于这个话题的帖子。搜索它们。
SendInput
用于辅助技术,如屏幕键盘、语音控制软件等。它的实现针对该用例进行了优化,为输入接收器提供了所需的信息。这些信息包括这样一个事实,即输入是生成的。客户端很容易过滤掉注入的输入,允许游戏保护自己免受天真的作弊企图。如果你想成为一个更好的骗子,你将不得不投入更多的研究工作。