我需要制作一個 dll 來模擬按鍵操作。為此,我發現您可以將 anINPUT與SendInput. 如果您從一開始就知道要模擬哪個鍵很容易,因為您可以查看串列Virtual-Key Codes并從一開始就使用這些鍵對其進行編碼,但我實際上需要能夠更改它們,因此我需要動態選擇它. 在我的研究中,我發現VkKeyScanExA這非常好,因為這個 dll 將用于本機函式,并且從 Java 我可以發送一個字串作為要按下的請求鍵,但是我遇到了一個問題,我找不到完整的串列關鍵字串給它就像我發現的一樣
Virtual-Key Codes。任何人都可以幫助我提供一個包含像這里這樣的串列Virtual-Key Codes但對于VkKeyScanExA? 問題是,如果我使用“4”,它將使用數字 4,但是如果用戶使用 num 4 呢?!這就是為什么一份完整的清單會非常有幫助的原因。
uj5u.com熱心網友回復:
經過大量的反復試驗,并閱讀了 JavaFX 的源代碼,我找到了一個更好的方法。我可以簡單地KeyCode從 JavaFX獲取 int 值并將其在本機函式中發送到 C 并且不需要發送我也根本不需要的字串值VkKeyScanExA。我不習慣以這種形式看到 int 值0x03,雖然我wVk只能獲得 String 或 enum 值,但例如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://www.uj5u.com/qukuanlian/314737.html
