C虚拟键盘输入有选择地工作

时间:2014-05-10 19:54:45

标签: c++ c visual-studio-2010 keyboard-events virtual-keyboard

我正在开发一个需要使用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
    }

1 个答案:

答案 0 :(得分:0)

问题在于游戏是通过DirectX运行的,这会阻止虚拟键盘敲击。通过从sys中直接渲染游戏,它可以避免一起使用directx并且运行良好:)