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 все вместе и работала нормально:)