SendInput を使用して文字を送信する場合、複数の文字の処理方法を理解することが重要です。
指定されたコードは 2 文字を送信しようとしましたが、パラメーターが間違っていたため失敗しました。 SendInput の最初のパラメータは INPUT 構造体の数を指定しますが、2 を送信しようとしているときに 1 を渡していました。
複数の文字を送信するには、次の配列が必要です。複数の INPUT 構造体。各構造体はキー イベントを表し、各キャラクターには次の 2 つのイベントが必要です:
したがって、2 を送信するには
KEYEVENTF_UNICODE フラグを使用する場合は、仮想キーの代わりに実際の Unicode コードポイントを指定する必要があります。さらに、UTF-16 サロゲート ペアには、ダウン/アップ INPUT の 2 セットが必要です。
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 中国語 Web サイトの他の関連記事を参照してください。