#include "winable.h "
…………………………
INPUT input[2];
//模拟按下Q键
::ZeroMemory(input, sizeof(input));
input[0].type = input[1].type = INPUT_KEYBOARD;
input[0].ki.wVk = input[1].ki.wVk = 81;//Q键的ASCII码
input[1].ki.dwFlags = KEYEVENTF_KEYUP; // THIS IS IMPORTANT
::SendInput(2, input, sizeof(INPUT));
它是模拟键盘按下,不去管哪个窗口接收,只要控制台窗口有输入焦点就可以收到。执行代码前你可以先用SetFocus把焦点设到控制台窗口处
就我所知道模拟按键可以有以下方式
方案1:
keybd_event(key,MapVirtualKey(key,0),0,0);//key值使用按键的虚拟码
::Sleep(20);
keybd_event(key,MapVirtualKey(key,0),KEYEVENTF_KEYUP,0);
方案2:
INPUT input;
::ZeroMemory(&input, sizeof(input));
input.type = INPUT_KEYBOARD;
input.ki.wVk = key;
::SendInput(1, &input, sizeof(INPUT));
input.ki.dwFlags = KEYEVENTF_KEYUP; // THIS IS IMPORTANT
::SendInput(1, &input, sizeof(INPUT));
方案3:
使用SendMessage也可以达到一部分模拟按键的效果,只是不是很好用,而且有些特殊键好像也模拟不了,所以这里就不给出具体的代码了。
推荐使用keybd_event模拟。