我需要做一个动态链接库来模拟按键。为此,我发现您可以将INPUT与SendInput结合使用。如果你从一开始就知道用哪个键来模拟它是很容易的,因为你可以查看Virtual-Key Codes的列表,并从一开始就用这些键对它进行编码,但我实际上需要能够改变它们,所以我需要它是动态选择的。在我的研究中,我发现VkKeyScanExA非常好,因为这个动态链接库将在本机函数中使用,并且我可以从Java发送一个字符串作为请求按下的键,但我遇到了一个问题,我找不到一个完整的键字符串列表,就像我在Virtual-Key Codes中找到的那样。有没有人能帮我找一个像这里的Virtual-Key Codes这样的源码,但是不是VkKeyScanExA的?问题是,如果我使用"4",它将使用数字4,但如果用户使用数字4怎么办?!这就是为什么一个完整的列表会很有帮助。
发布于 2021-10-04 15:53:17
经过大量的试验和错误,并阅读了JavaFX的源代码,我找到了一个更好的方法来做这件事。我可以简单地从JavaFX获取KeyCode的int值,并在本机函数中将其发送给C++,而不需要发送字符串值,我也根本不需要VkKeyScanExA。我不习惯看到这种0x03形式的int值,虽然wVk只能获取字符串或枚举值,但例如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));
}https://stackoverflow.com/questions/69419300
复制相似问题