Heim >Backend-Entwicklung >C++ >Wie sende ich mehrere Zeichen mit SendInput und verwalte Unicode-Überlegungen?

Wie sende ich mehrere Zeichen mit SendInput und verwalte Unicode-Überlegungen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-25 04:15:29673Durchsuche

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

Mehrere Zeichen mit SendInput senden

Beim Senden von Zeichen mit SendInput ist es wichtig zu verstehen, wie mit mehreren Zeichen umgegangen wird.

Fehlerfall: Falscher Parameter

Der von Ihnen angegebene Code hat versucht, zwei Zeichen zu senden, ist jedoch aufgrund eines falschen Parameters fehlgeschlagen. Der erste Parameter von SendInput gibt die Anzahl der INPUT-Strukturen an, aber Sie haben 1 übergeben, während Sie versucht haben, 2 zu senden.

Richtiger Ansatz: Mehrere INPUT-Strukturen

Um mehrere Zeichen zu senden, benötigen Sie ein Array von mehrere INPUT-Strukturen. Jede Struktur stellt ein Schlüsselereignis dar, und für jedes Zeichen benötigen Sie zwei Ereignisse:

  • Keydown-Ereignis
  • Keyup-Ereignis

Daher senden Sie 2 Zeichen benötigen Sie 4 INPUT-Strukturen.

Überlegungen zu Unicode

Bei Verwendung des Flags KEYEVENTF_UNICODE müssen Sie tatsächliche Unicode-Codepunkte anstelle virtueller Schlüssel angeben. Darüber hinaus erfordern UTF-16-Ersatzpaare zwei Sätze von Down/Up-INPUTs.

Beispielcode

Hier ist eine Beispielfunktion zum Senden einer Unicode-Zeichenfolge mit SendInput:

<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>

Das obige ist der detaillierte Inhalt vonWie sende ich mehrere Zeichen mit SendInput und verwalte Unicode-Überlegungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn