使用 SendInput 發送字元時,了解如何處理多個字元非常重要。
您提供的代碼嘗試發送兩個字符,但由於參數不正確而失敗。 SendInput 的第一個參數指定 INPUT 結構的數量,但您在嘗試傳送 2 時傳入了 1。
要傳送多個字符,您需要一個陣列多個 INPUT 結構。每個結構代表一個按鍵事件,對於每個字符,您需要兩個事件:
因此,要發送2字符,您需要4 個INPUT 結構。
使用 KEYEVENTF_UNICODE 標誌時,您需要指定實際的 Unicode 代碼點而不是虛擬鍵。此外,UTF-16 代理程式對需要兩組向下/向上 INPUT。
以下是使用 SendInput 傳送 Unicode 字串的範例函數:
<code class="c++">#include <vector> #include <string> void SendInputString(const std::wstring &str) { int len = str.length(); if (len == 0) return; std::vector<INPUT> in(len * 2); ZeroMemory(&in[0], in.size() * sizeof(INPUT)); int i = 0, idx = 0; while (i < len) { WORD ch = (WORD)str[i++]; if ((ch < 0xD800) || (ch > 0xDFFF)) { in[idx].type = INPUT_KEYBOARD; in[idx].ki.wScan = ch; in[idx].ki.dwFlags = KEYEVENTF_UNICODE; ++idx; in[idx] = in[idx - 1]; in[idx].ki.dwFlags |= KEYEVENTF_KEYUP; ++idx; } else { in[idx].type = INPUT_KEYBOARD; in[idx].ki.wScan = ch; in[idx].ki.dwFlags = KEYEVENTF_UNICODE; ++idx; in[idx].type = INPUT_KEYBOARD; in[idx].ki.wScan = (WORD)str[i++]; in[idx].ki.dwFlags = KEYEVENTF_UNICODE; ++idx; in[idx] = in[idx - 2]; in[idx].ki.dwFlags |= KEYEVENTF_KEYUP; ++idx; in[idx] = in[idx - 2]; in[idx].ki.dwFlags |= KEYEVENTF_KEYUP; ++idx; } } SendInput(in.size(), &in[0], sizeof(INPUT)); }</code>
以上是如何使用 SendInput 發送多個字元並管理 Unicode 注意事項?的詳細內容。更多資訊請關注PHP中文網其他相關文章!