C虚拟键盘输入选择性工作

C Virtual Keyboard Input selectively working

本文关键字:选择性 工作 输入 键盘 虚拟      更新时间:2023-10-16

我正在做一个需要虚拟输入的项目,该项目正在使用windows.h头在Microsoft Visual studio中编码。为此,我使用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
    }

问题是游戏是通过DirectX运行的,这阻止了虚拟键盘敲击。通过直接从系统中读取游戏,它避免了直接连接在一起,并且工作得很好:)