【发布时间】:2014-11-03 03:28:07
【问题描述】:
我尝试模拟 CTRL+NumENTER。我用键盘测试程序(PassMark KeyboardTest)检查了代码,似乎按下了 NumENTER 但没有释放。如果我不使用 KEYEVENTF_EXTENDEDKEY 一切都会被释放,但我会得到正常的返回。
这是我的代码:
INPUT *ip = new INPUT[2]; // set up input 1
(ip)->type = INPUT_KEYBOARD; // set up keyboard event
(ip)->ki.wScan = 0;
(ip)->ki.time = 0;
(ip)->ki.dwExtraInfo = 0;
(ip)->ki.wVk = VK_CONTROL; // set ip[0] to CTRL
(ip)->ki.dwFlags = 0;
Sleep(100);
(ip+1)->type = INPUT_KEYBOARD; // set up keyboard event
(ip+1)->ki.wScan = 0;
(ip+1)->ki.time = 0;
(ip+1)->ki.dwExtraInfo = 0;
(ip+1)->ki.wVk = VK_RETURN; // set ip[1] to ENTER
(ip+1)->ki.dwFlags = KEYEVENTF_EXTENDEDKEY; // make ENTER to NumENTER
Sleep(100);
SendInput(2, ip, sizeof(INPUT)); // send key
Sleep(100);
(ip)->ki.dwFlags = KEYEVENTF_KEYUP; // event for keyrelease
(ip+1)->ki.dwFlags = KEYEVENTF_KEYUP; // event for keyrelease
Sleep(100);
SendInput(2, ip, sizeof(INPUT)); // release keys
return 0;
【问题讨论】:
-
大部分应用都是通过扫码来区分这两个键的。
标签: c++ input keyboard keyevent