Heim > Backend-Entwicklung > C++ > Hauptteil

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

Mary-Kate Olsen
Freigeben: 2024-10-25 04:15:29
Original
562 Leute haben es durchsucht

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!