【问题标题】:VkKeyScanExA all TCHAR option listVkKeyScanExA 所有 TCHAR 选项列表
【发布时间】:2021-11-23 21:27:18
【问题描述】:

我需要制作一个模拟按键的 dll。为此,我发现您可以将INPUTSendInput 结合使用。如果您从一开始就知道要模拟哪个键很容易,因为您可以查看Virtual-Key Codes 的列表并从一开始就使用这些键对其进行编码,但我实际上需要能够更改它们,所以我需要它被动态选择。在我的研究中,我发现VkKeyScanExA 非常好,因为这个 dll 将在本机函数中使用,并且从 Java 中我可以发送一个字符串作为要按下的请求键,但是我遇到了一个问题,我找不到一个完整的关键字符串列表,就像我发现的那样 Virtual-Key Codes。任何人都可以帮助我提供一个包含类似Virtual-Key Codes 的列表但针对VkKeyScanExA 的列表的来源吗?问题是如果我使用“4”,它将使用数字 4,但如果用户使用 num 4 怎么办?!这就是为什么一个完整的列表会很有帮助的原因。

【问题讨论】:

    标签: c++ winapi


    【解决方案1】:

    经过大量试验和错误,并阅读 JavaFX 的源代码,我找到了更好的方法。我可以简单地从 JavaFX 获取 KeyCode 的 int 值,并将其以本机函数发送到 C++,而无需发送 String 值,我也根本不需要 VkKeyScanExA。我不习惯看到0x03这种形式的int值,我虽然wVk只能获取String或枚举值,但例如0x03也可以用作int。

    这是一个简单的例子,以防有人和我有相同的用例:

    a) 在java中

    static native void pressKey(int key);
    
    System.load(System.getProperty("user.dir") + "\\Data\\DLL\\Auto Key Press.dll");
    pressKey(KeyCode.HOME.getCode());
    

    b) 在 C++ 中

    JNIEXPORT void JNICALL Java_package_Test_pressKey(JNIEnv*, jclass, jint key) {
    INPUT ip;
    ip.type = INPUT_KEYBOARD;
    ip.ki.wVk = (int)key;
    ip.ki.wScan = 0;
    ip.ki.dwFlags = 0;
    ip.ki.time = 0;
    ip.ki.dwExtraInfo = 0;
    SendInput(1, &ip, sizeof(INPUT));
    ip.ki.dwFlags = KEYEVENTF_KEYUP;
    SendInput(1, &ip, sizeof(INPUT));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-09
      • 2015-02-07
      • 2023-03-03
      • 1970-01-01
      • 2019-09-06
      • 1970-01-01
      • 1970-01-01
      • 2015-08-15
      相关资源
      最近更新 更多