複数の文字を送信するための SendInput の使用に対処する
SendInput は、キーボード入力をシミュレートするために使用される関数です。ただし、この例には重大な誤解があります。
SendInput の最初のパラメーターは、渡される INPUT 構造体の数を指定します。元のコードでは、INPUT 構造体が 1 つだけ定義されていますが、関数はパラメーターを 2 に設定して呼び出されます。パラメーター数が間違っているため、入力は送信されません。
アプローチの修正
SendInput を使用して複数の文字を送信するには、次のようにします。 INPUT 構造体の配列を作成する必要があります。キャラクタごとに 2 セットの構造体が必要になります。1 つはキーダウン イベント用、もう 1 つはキーアップ イベント用です。したがって、2 つの文字を送信するには、合計 4 つの INPUT 構造体が必要になります。
または、KEYEVENTF_UNICODE フラグを使用して Unicode 文字を直接送信することもできます。ただし、UTF-16 サロゲート ペアの場合、コード ユニットを送信するには 2 セットの 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>
このコードは、必要に応じて UTF-16 サロゲート ペアを考慮して、指定された Unicode 文字列をキーボード入力として送信します。 .
以上がSendInput を使用して複数の文字を送信する方法: パラメーターと Unicode 処理の問題に対処する?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。