ホームページ > バックエンド開発 > C++ > SendInput を使用して複数の文字を送信する方法: パラメーターと Unicode 処理の問題に対処する?

SendInput を使用して複数の文字を送信する方法: パラメーターと Unicode 処理の問題に対処する?

Mary-Kate Olsen
リリース: 2024-10-26 01:41:28
オリジナル
897 人が閲覧しました

How to Send Multiple Characters Using SendInput:  Addressing Parameter and Unicode Handling Issues?

複数の文字を送信するための 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート