我想编写一个C++代码,模拟按下键盘上的"A"键:
// Set up a generic keyboard event.
ip.type = INPUT_KEYBOARD;
ip.ki.wScan = 0; // hardware scan code for key
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;
// Press the "..." key
ip.ki.wVk = code; // virtual-key code for the "a" key
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));
// Release the "..." key
ip.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release
SendInput(1, &ip, sizeof(INPUT));
当我启动其他程序并等待我的程序执行时,单击"A"按钮,第一个程序对其做出反应,这很好用。但是我发现在其他应用程序中,我的操作被某种方式阻止了(我可以手动按键盘上的"A",但是使用我的程序不会引起任何动作)。
那么,我该怎么做才能让程序中按下"A"的效果更像手动按下的"A"(使第二个程序无法识别它是从程序中调用的)?
我没有第二个程序的源代码,也不知道它如何识别手动按下的"A"。
我确定我想要响应我的代码窗口是前台窗口,可以接收和阻止我的按键(因此它可以决定事件不是来自用户而是来自程序)。
SendInput
的发明是为了解决在单独调用keybd_event
发送单个键盘消息时出现的问题。不要滥用SendInput
,通过多次使用单个INPUT
结构来调用它。应该建立一个INPUT
结构数组并一次性发送它们。 - IInspectable