下面的程序没有做任何事情,尽pipe预计会模拟每秒钟按“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)
- PHP使用参数参数在服务器上运行可执行程
- 在列表视图中禁用水平滚动条
- WndProc覆盖奇怪的消息,不能正确
- 强制所有派生类实现具有只读属性的特定属性
- 创build一个不属于创build过程的subprocess
对内存位置的访问无效。
但是我不知道是什么原因造成的。
尝试
SendInput(INPUTS, inputArray, sizeof(INPUT));
并检查返回值是否为非零。 实际上,它应该等于发送的输入数量,在这种情况下是4。
如果该功能被另一个线程或UIPI( 用户界面特权隔离 )阻止,该功能可能会失败。
为避免出现其他问题,您可能需要检查当前的键盘状态以及SendInput
添加到输入流以及正在运行的其他键可能会干扰它。
出于好奇,你试图模拟什么行动? 将用户输入“伪造”到任何应用程序通常不是一个非常优雅的做法。