Maison > développement back-end > C++ > le corps du texte

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

Mary-Kate Olsen
Libérer: 2024-10-26 01:41:28
original
801 Les gens l'ont consulté

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!