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 虚拟键盘输入有选择地工作的主要内容,如果未能解决你的问题,请参考以下文章

win7系统下如何调出虚拟键盘

使用 C#/Windows API 的虚拟键盘 - 发送键输入,但不获取焦点

如何使用虚拟键盘写入焦点输入?

安卓平板外接鼠标使用正常,外接键盘只能输入数字和英文。下载了百度输入法,也只能使用虚拟键盘。

手机怎么调出软键盘

如何在单击输入键盘输出时选择文本框