C Виртуальный ввод с клавиатуры выборочно работает

Я работаю над проектом, который нуждается в виртуальном вводе, который кодируется в Microsoft Visual Studios с помощью заголовка windows.h. Для этого я использую метод keybd_event () и метод VkKeyScan ():

keybd_event(VkKeyScan('w'), 0, 0, 0);
keybd_event(VkKeyScan('w'), 0, KEYEVENTF_KEYUP, 0);

Однако виртуальный ввод распознается только некоторыми программами, такими как «Блокнот», «Командная строка», браузерами и другими приложениями, использующими текстовые поля. Целью виртуального ввода для моего проекта является использование клиента для управления «VisualGameBoyAdvance», который принимает ввод с клавиатуры, который затем преобразуется в команду, такую ​​как «w» = запуск, «z» = кнопка и т. Д.

Почему виртуальный ввод читается при использовании приложений в текстовых полях, а не как команды? Есть ли альтернативные методы файла заголовка windows.h или есть лучшие методы в заголовке?

ОбновитьЯ пытался использовать VkKeyScanEx () в качестве альтернативного метода для принятия виртуального ввода в качестве попытки в темноте. Как мне указать свой входной идентификатор локали? Я пытался использовать UTF-8 и en_AU.UTF-8, но безуспешно. Есть ли таблица, которая переводит, как это указать?

Я также пытался использовать

keybd_event(GetKeyState('w'), 0, 0, 0);
keybd_event(GetKeyState('w'), 0, KEYEVENTF_KEYUP, 0);

Который вообще не работал и пробовал

while(1){
/*Sleep(1000);
keybd_event(GetKeyState('w'), 0, 0, 0);
keybd_event(GetKeyState('w'), 0, KEYEVENTF_KEYUP, 0);*/
// Pause for 5 seconds.
Sleep(500);

// 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 "W" key
ip.ki.wVk = 0x57; // virtual-key code for the "a" key
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));

// Release the "A" key
ip.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release
SendInput(1, &ip, sizeof(INPUT));

// Exit normally
}

1

Решение

Проблема заключалась в том, что игра работала через DirectX, что предотвращало виртуальные нажатия клавиш. Рендируя игру прямо из sys, она избежала DirectX все вместе и работала нормально 🙂

0

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


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