gpt4 book ai didi

c++ - 使用 SendInput 函数模拟输入

转载 作者:可可西里 更新时间:2023-11-01 11:59:24 24 4
gpt4 key购买 nike

下面的程序没有做任何事情,尽管预计会模拟每秒按“a”和“b”。为什么它不起作用?

#include <Windows.h>
#include <iostream>

using namespace std;

const int INPUTS = 4;

int main()
{
INPUT inputArray[INPUTS];

INPUT input;

input.type = INPUT_KEYBOARD;

//Press 'a' key
input.ki.wVk = 0x41;
input.ki.wScan = MapVirtualKey(0x41,MAPVK_VK_TO_VSC);
inputArray[0] = input;

//Release 'a' key
input.ki.dwFlags = KEYEVENTF_KEYUP;
inputArray[1] = input;


//Press 'b' key
input.ki.dwFlags = 0;
input.ki.wVk = 0x42;
input.ki.wScan = MapVirtualKey(0x42,MAPVK_VK_TO_VSC);
inputArray[2] = input;

//Release 'b' key
input.ki.dwFlags = KEYEVENTF_KEYUP;
inputArray[3] = input;

Sleep(5000);

std::cout<<"GO!!!\n";

for(int i=0; i<100; i++)
{
SendInput(sizeof(inputArray),inputArray,sizeof(INPUT));
Sleep(1000); //Don't remove!
}

std::cout<<GetLastError()<<std::endl;

system("Pause");
return 0;
}

最后的错误是

ERROR_NOACCESS

998 (0x3E6)

Invalid access to memory location.

但我不知道是什么原因造成的。

最佳答案

尝试

SendInput(INPUTS, inputArray, sizeof(INPUT));

并检查返回值是否为非零。事实上,它应该等于发送的输入数,在本例中为 4。

如果被另一个线程或 UIPI ( User Interface Privilege Isolation ) 阻塞,该函数可能会失败

为避免其他问题,您可能需要检查当前键盘状态以及 SendInput 添加到输入流,而在运行时按下其他键可能会干扰它。

出于好奇,您要模拟什么 Action ? “伪造”用户对任何应用程序的输入通常不是一种非常优雅的做法。

关于c++ - 使用 SendInput 函数模拟输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11908262/

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