Я попробовал несколько способов создания виртуального алгоритма нажатия клавиш, который работает с эмуляторами видеоигр (в частности, VisualBoyAdvance). До сих пор все мои попытки не увенчались успехом, так как имитированный ввод не работает в эмуляторе (хотя физическое нажатие клавиш работает просто отлично, поэтому это не проблема отображения).
Я попробовал простое:
#include <iostream>
#include <Windows.h>
int main()
{
while (true)
{
keybd_event(0x67, 0, 0, 0);
Sleep(1000);
}
}
а также
#include <iostream>
#include <Windows.h>
INPUT ip;
int main()
{
while (1)
{
// 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 "NUMPAD-7" key
ip.ki.wVk = 0x67; // virtual-key code
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));
Sleep(100);
// Release the "NUMPAD-7" key
ip.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release
SendInput(1, &ip, sizeof(INPUT));
Sleep(900);
}
}
Обе эти программы успешно набирают «7» один раз в секунду в любом выбранном текстовом редакторе, но когда я выбрал VisualBoyAdvance (которому я назначил клавишу NUMPAD-7 для кнопки «А»), ничего не происходит. Но если я затем физически нажимаю NUMPAD-7, он реагирует на нажатие кнопки A, как и должно быть.
Что я делаю неправильно? Как заставить этот код работать в эмуляторах видеоигр.
Задача ещё не решена.
Других решений пока нет …