Maison >développement back-end >C++ >Comment envoyer plusieurs caractères à l'aide de SendInput : résoudre les problèmes de paramètres et de gestion Unicode ?

Comment envoyer plusieurs caractères à l'aide de SendInput : résoudre les problèmes de paramètres et de gestion Unicode ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-26 01:41:28899parcourir

How to Send Multiple Characters Using SendInput:  Addressing Parameter and Unicode Handling Issues?

Résolution de l'utilisation de SendInput pour l'envoi de plusieurs caractères

SendInput est une fonction utilisée pour simuler la saisie au clavier. Cependant, dans l'exemple donné, il y a un malentendu crucial.

Le premier paramètre de SendInput spécifie le nombre de structures INPUT transmises. Dans le code original, une seule structure INPUT est définie, mais la fonction est être appelé avec le paramètre défini sur 2. Ce nombre de paramètres incorrect empêche l'envoi de toute entrée.

Corriger l'approche

Pour envoyer plusieurs caractères à l'aide de SendInput, vous devrez besoin de créer un tableau de structures INPUT. Pour chaque personnage, vous aurez besoin de deux ensembles de structures, un pour l'événement keydown et un pour l'événement keyup. Par conséquent, pour envoyer deux caractères, vous aurez besoin d'un total de quatre structures INPUT.

Vous pouvez également utiliser l'indicateur KEYEVENTF_UNICODE pour envoyer directement des caractères Unicode. Cependant, sachez que pour les paires de substitution UTF-16, vous devrez utiliser deux ensembles d'événements keydown/keyup pour envoyer les unités de code.

Exemple :

Voici un extrait qui montre comment envoyer une chaîne de caractères Unicode à l'aide de l'indicateur KEYEVENTF_UNICODE :

<code class="cpp">#include <vector>
#include <string>

void SendUnicodeString(const std::wstring &str) {
    int length = str.length();
    std::vector<INPUT> input(length * 2);
    int index = 0;
    for (int i = 0; i < length; ++i) {
        WORD character = static_cast<WORD>(str[i]);
        input[index].type = INPUT_KEYBOARD;
        input[index].ki.wScan = character;
        input[index].ki.dwFlags = KEYEVENTF_UNICODE;
        ++index;
        input[index] = input[index - 1];
        input[index].ki.dwFlags |= KEYEVENTF_KEYUP;
        ++index;
    }
    SendInput(input.size(), &input[0], sizeof(INPUT));
}</code>

Ce code enverra la chaîne Unicode spécifiée comme entrée au clavier, en tenant compte des paires de substitution UTF-16 si nécessaire .

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn