【发布时间】:2014-05-10 19:54:45
【问题描述】:
我正在开发一个需要虚拟输入的项目,该项目使用 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' = start、'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
}
【问题讨论】:
标签: c++ c visual-studio-2010 keyboard-events virtual-keyboard