C 虚拟键盘输入有选择地工作
Posted
技术标签:
【中文标题】C 虚拟键盘输入有选择地工作【英文标题】:C Virtual Keyboard Input selectively working 【发布时间】: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
【问题讨论】:
【参考方案1】:问题在于游戏是通过 DirectX 运行的,这会阻止虚拟键盘敲击。通过直接从系统中渲染游戏,它完全避免了directx并且运行良好:)
【讨论】:
以上是关于C 虚拟键盘输入有选择地工作的主要内容,如果未能解决你的问题,请参考以下文章
使用 C#/Windows API 的虚拟键盘 - 发送键输入,但不获取焦点