KEYEVENTF_KEYUP не работает, если используется KEYEVENTF_EXTENDEDKEY

Я пытаюсь смоделировать 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;

0

Решение

использование поразрядно или установить dwFlags, KEYEVENTF_EXTENDEDKEY добавляет префикс (0xE0 (224)) к scanCode,

(ip)->ki.dwFlags |= KEYEVENTF_KEYUP;         // event for keyrelease
(ip+1)->ki.dwFlags |= KEYEVENTF_KEYUP;       // event for keyrelease
0

Другие решения


По вопросам рекламы [email protected]