1
다음 프로그램은 매초마다 "a"와 "b"를 눌러 시뮬레이션 할 예정 이었지만 아무 것도하지 않았습니다. 왜 효과가 없습니까?SendInput 함수를 사용하여 입력 시뮬레이션
#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)
잘못된 접근이다.
하지만 그 원인을 알 수 없습니다.
Sendinput의 첫 번째 매개 변수가 잘못되었습니다. –
또한 첫 번째 INPUT의 input.ki.dwFlags는 INPUT 입력이 선언되었지만 아무 것도 초기화되지 않았기 때문에 스택의 임의 가비지 일 수 있습니다. 세 번째 항목에서와 같이 명시 적으로 0으로 설정해야합니다. – BrendanMcK