WM_CHAR message

Publié dans la fenêtre avec le focus clavier lorsqu’un message WM_KEYDOWN est traduit par la fonction TranslateMessage . Le message WM_CHAR contient le code de caractère de la touche qui a été enfoncée.

#define WM_CHAR                         0x0102

Paramètres

wParam

Code caractère de la clé.

lParam

Le nombre de répétitions, le code d’analyse, l’indicateur de clé étendue, le code de contexte, l’indicateur d’état de clé précédent et l’indicateur d’état de transition, comme indiqué dans le tableau suivant.

Bits Signification
0-15 Nombre de répétitions pour le message actuel. La valeur est le nombre de fois où la séquence de touches est répérée automatiquement en raison de la conservation de la touche par l’utilisateur. Si la séquence de touches est maintenue suffisamment longtemps, plusieurs messages sont envoyés. Toutefois, le nombre de répétitions n’est pas cumulatif.
16-23 Code d’analyse. La valeur dépend de l’OEM.
24 Indique si la touche est une touche étendue, telle que les touches Alt et Ctrl de droite qui s’affichent sur un clavier amélioré à 101 ou 102 touches. La valeur est 1 s’il s’agit d’une clé étendue ; sinon, c’est 0.
25-28 Réservés au; n’utilisez pas.
29 Code de contexte. La valeur est 1 si la touche ALT est maintenue enfoncée pendant que la touche est enfoncée ; sinon, la valeur est 0.
30 État de clé précédent. La valeur est 1 si la clé est en panne avant l’envoi du message, ou elle est 0 si la clé est en place.
31 État de transition. La valeur est 1 si la touche est relâchée, ou elle est 0 si la touche est enfoncée.

Pour plus d’informations, consultez Indicateurs de message de séquence de touches.

Valeur retournée

Une application doit retourner zéro si elle traite ce message.

Exemple

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
   
    // ...

    case WM_CHAR:
        OnKeyPress(wParam);
        break;

    default:
        return DefWindowProc(hwnd, message, wParam, lParam);
    }
    return 0;
}

Exemples classiques Windows sur GitHub.

Notes

Le message WM_CHAR utilise des unités de code UTF-16 (format de transformation Unicode 16 bits) dans son wParam si la version Unicode de la fonction RegisterClass a été utilisée pour inscrire la classe window. Sinon, le système fournit des caractères dans la page de codes du processus actuel, qui peut être défini sur UTF-8 dans Windows version 1903 (mise à jour de mai 2019) et versions ultérieures. Pour plus d’informations, consultez Inscription de classes de fenêtre et Utiliser des pages de codes UTF-8 dans les applications Windows.

À compter de Windows Vista, WM_CHAR message peut envoyer des paires de substitution UTF-16 aux fenêtres Unicode. Utilisez les macros IS_HIGH_SURROGATE, IS_LOW_SURROGATE et IS_SURROGATE_PAIR pour détecter de tels cas, si nécessaire.

Il n’y a pas nécessairement de correspondance un-à-un entre les touches enfoncées et les messages caractères générés, de sorte que les informations dans le mot d’ordre supérieur du paramètre lParam ne sont généralement pas utiles aux applications. Les informations contenues dans le mot d’ordre supérieur s’appliquent uniquement au message WM_KEYDOWN le plus récent qui précède la publication du message WM_CHAR .

Pour les claviers à 101 et 102 touches améliorés, les touches étendues sont les touches ALT droite et CTRL droite sur la section main du clavier ; les touches INS, DEL, HOME, END, PAGE HAUT, PAGE BAS et flèche dans les clusters à gauche du pavé numérique; ainsi que les touches division (/) et ENTRÉE dans le pavé numérique. D’autres claviers peuvent prendre en charge le bit de touche étendue dans le paramètre lParam .

Le message WM_UNICHAR est identique à WM_CHAR, sauf qu’il utilise UTF-32. Il est conçu pour envoyer ou publier des caractères Unicode dans les fenêtres ANSI, et il peut gérer les caractères plan supplémentaire Unicode.

Spécifications

Condition requise Valeur
Client minimal pris en charge
Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge
Windows 2000 Server [applications de bureau uniquement]
En-tête
Winuser.h (inclure Windows.h)

Voir aussi