Я пытаюсь смоделировать 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;
использование поразрядно или установить dwFlags
, KEYEVENTF_EXTENDEDKEY
добавляет префикс (0xE0 (224)) к scanCode
,
(ip)->ki.dwFlags |= KEYEVENTF_KEYUP; // event for keyrelease
(ip+1)->ki.dwFlags |= KEYEVENTF_KEYUP; // event for keyrelease