我正在开发一个需要使用windows.h标头在Microsoft Visual Studios中编码的虚拟输入的项目。为此,我使用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
}
答案 0 :(得分:0)
问题在于游戏是通过DirectX运行的,这会阻止虚拟键盘敲击。通过从sys中直接渲染游戏,它可以避免一起使用directx并且运行良好:)