Maison > développement back-end > C++ > Comment envoyer plusieurs caractères à l'aide de SendInput et gérer les considérations Unicode ?

Comment envoyer plusieurs caractères à l'aide de SendInput et gérer les considérations Unicode ?

Mary-Kate Olsen
Libérer: 2024-10-25 04:15:29
original
672 Les gens l'ont consulté

How to send multiple characters using SendInput and manage Unicode considerations?

Envoi de plusieurs caractères avec SendInput

Lors de l'envoi de caractères à l'aide de SendInput, il est important de comprendre comment gérer plusieurs caractères.

Cas d'erreur : paramètre incorrect

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.

Approche correcte : plusieurs structures INPUT

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 :

  • Événement Keydown
  • Événement Keyup

Par conséquent, pour envoyer 2 caractères, vous avez besoin de 4 structures INPUT.

Considérations Unicode

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.

Exemple de code

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

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