ホームページ  >  記事  >  バックエンド開発  >  SendInput を使用して複数の文字を送信し、Unicode に関する考慮事項を管理するにはどうすればよいですか?

SendInput を使用して複数の文字を送信し、Unicode に関する考慮事項を管理するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-25 04:15:29564ブラウズ

How to send multiple characters using SendInput and manage Unicode considerations?

SendInput を使用して複数の文字を送信する

SendInput を使用して文字を送信する場合、複数の文字の処理方法を理解することが重要です。

エラーケース: パラメーターが正しくありません

指定されたコードは 2 文字を送信しようとしましたが、パラメーターが間違っていたため失敗しました。 SendInput の最初のパラメータは INPUT 構造体の数を指定しますが、2 を送信しようとしているときに 1 を渡していました。

正しいアプローチ: 複数の INPUT 構造体

複数の文字を送信するには、次の配列が必要です。複数の INPUT 構造体。各構造体はキー イベントを表し、各キャラクターには次の 2 つのイベントが必要です:

  • Keydown イベント
  • Keyup イベント

したがって、2 を送信するには

Unicode に関する考慮事項

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。