Heim >Backend-Entwicklung >C++ >Wie sende ich mehrere Zeichen mit SendInput und verwalte Unicode-Überlegungen?
Beim Senden von Zeichen mit SendInput ist es wichtig zu verstehen, wie mit mehreren Zeichen umgegangen wird.
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.
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:
Daher senden Sie 2 Zeichen benötigen Sie 4 INPUT-Strukturen.
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.
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!