Lors de l'envoi de caractères à l'aide de SendInput, il est important de comprendre comment gérer plusieurs caractères.
Le code que vous avez fourni a tenté d'envoyer deux caractères, mais a échoué en raison d'un paramètre incorrect. Le premier paramètre de SendInput spécifie le nombre de structures INPUT, mais vous passiez 1 en essayant d'en envoyer 2.
Pour envoyer plusieurs caractères, vous avez besoin d'un tableau de plusieurs structures INPUT. Chaque structure représente un événement clé, et pour chaque personnage, vous avez besoin de deux événements :
Par conséquent, pour envoyer 2 caractères, vous avez besoin de 4 structures INPUT.
Lors de l'utilisation de l'indicateur KEYEVENTF_UNICODE, vous devez spécifier des points de code Unicode réels au lieu de clés virtuelles. De plus, les paires de substitution UTF-16 nécessitent deux ensembles d'entrées down/up.
Voici un exemple de fonction pour envoyer une chaîne Unicode à l'aide de 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>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!