擴展SendInput傳輸多個字元的功能
SendInput函數是程式設計師武器庫中的一個強大工具,可以模擬鍵盤輸入。然而,它的容量並不限於傳輸單個字元。本文探討如何利用 SendInput 有效地傳遞多個字元。
最初,人們可能會嘗試使用類似以下的技術:
INPUT in;
in.type = INPUT_KEYBOARD;
in.ki.wScan = 0;
in.ki.time = 0;
in.ki.dwExtraInfo = 0;
in.ki.wVk = 0x53 0x54;
SendInput(2, &in, sizeof(INPUT));
不幸的是,這段程式碼將無法如預期執行。原因在於SendInput的第一個參數,它指定了傳入的INPUT結構體的數量。在這種情況下,只提供了一個結構體,與傳遞給SendInput的2的值相反。
而且,它是不可能使用單一 INPUT 結構來指定多個虛擬鍵。為了實現這個目標,必須宣告一個 INPUT 結構數組,每對代表一個 keydown 和 keyup 事件。因此,對於上述範例,需要四個 INPUT 結構。
另一個考慮因素涉及 KEYEVENTF_UNICODE 標誌。使用此標誌時,將指定實際的 Unicode 碼位而不是虛擬鍵。每個代碼點對應一個 UTF-16 代碼單元,這表示如果 Unicode 代碼點需要代理對,則需要兩組向下/向上 INPUT 結構。
總而言之,正確的方法包括聲明一個陣列INPUT 結構,確保結構的數量與要傳輸的字元數量相符。此外,如果使用 KEYEVENTF_UNICODE,則應正確處理 Unicode 代碼點並指定相應的向下/向上事件。透過遵守這些準則,開發人員可以充分利用 SendInput 的潛力,輕鬆且有效率地傳輸多個字元。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3