解決使用 SendInput 發送多個字元的問題
SendInput 是一個用於模擬鍵盤輸入的函數。然而,在給定的例子中,存在一個嚴重的誤解。
SendInput 的第一個參數指定傳入的 INPUT 結構體的數量。在原始程式碼中,只定義了一個 INPUT 結構體,但函數是被呼叫時參數設定為 2。這個不正確的參數計數會阻止發送任何輸入。
更正方法
要使用 SendInput 發送多個字符,您將需要建立一個 INPUT 結構數組。對於每個字符,您將需要兩組結構,一組用於 keydown 事件,一組用於 keyup 事件。因此,要發送兩個字符,總共需要四個 INPUT 結構。
或者,您可以使用 KEYEVENTF_UNICODE 標誌直接傳送 Unicode 字元。但是,請注意,對於 UTF-16 代理程式項目對,您將需要使用兩組 keydown/keyup 事件來傳送代碼單元。
範例:
以下程式碼片段示範如何使用KEYEVENTF_UNICODE 標誌傳送Unicode 字元字串:
<code class="cpp">#include <vector> #include <string> void SendUnicodeString(const std::wstring &str) { int length = str.length(); std::vector<INPUT> input(length * 2); int index = 0; for (int i = 0; i < length; ++i) { WORD character = static_cast<WORD>(str[i]); input[index].type = INPUT_KEYBOARD; input[index].ki.wScan = character; input[index].ki.dwFlags = KEYEVENTF_UNICODE; ++index; input[index] = input[index - 1]; input[index].ki.dwFlags |= KEYEVENTF_KEYUP; ++index; } SendInput(input.size(), &input[0], sizeof(INPUT)); }</code>
此程式碼將發送指定的Unicode 字串作為鍵盤輸入,並在必要時考慮UTF-16 代理項目對.
以上是如何使用 SendInput 發送多個字元:解決參數和 Unicode 處理問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!