Partager via


GetMessageA, fonction (winuser.h)

Récupère un message à partir de la file d’attente de messages du thread appelant. La fonction distribue les messages envoyés entrants jusqu’à ce qu’un message publié soit disponible pour la récupération.

Contrairement à GetMessage, la fonction PeekMessage n’attend pas qu’un message soit publié avant de retourner.

Syntaxe

BOOL GetMessageA(
  [out]          LPMSG lpMsg,
  [in, optional] HWND  hWnd,
  [in]           UINT  wMsgFilterMin,
  [in]           UINT  wMsgFilterMax
);

Paramètres

[out] lpMsg

Type : LPMSG

Pointeur vers une structure MSG qui reçoit des informations de message de la file d’attente de messages du thread.

[in, optional] hWnd

Type : HWND

Handle vers la fenêtre dont les messages doivent être récupérés. La fenêtre doit appartenir au thread actuel.

Si hWnd est NULL, GetMessage récupère les messages pour n’importe quelle fenêtre qui appartient au thread actif, ainsi que les messages de la file d’attente de messages du thread actif dont la valeur hwnd est NULL (voir la structure MSG ). Par conséquent, si hWnd est NULL, les messages de fenêtre et les messages de thread sont traités.

Si hWnd est -1, GetMessage récupère uniquement les messages de la file d’attente de messages du thread actuel dont la valeur hwnd est NULL, autrement dit, les messages de thread publiés par PostMessage (lorsque le paramètre hWnd est NULL) ou PostThreadMessage.

[in] wMsgFilterMin

Type : uiNT

Valeur entière de la valeur de message la plus basse à récupérer. Utilisez WM_KEYFIRST (0x0100) pour spécifier le premier message clavier ou WM_MOUSEFIRST (0x0200) pour spécifier le premier message de la souris.

Utilisez WM_INPUT ici et dans wMsgFilterMax pour spécifier uniquement les messages WM_INPUT.

Si wMsgFilterMin et wMsgFilterMax sont à la fois zéro, GetMessage retourne tous les messages disponibles (autrement dit, aucun filtrage de plage n’est effectué).

[in] wMsgFilterMax

Type : uiNT

Valeur entière de la valeur de message la plus élevée à récupérer. Utilisez WM_KEYLAST pour spécifier le dernier message clavier ou WM_MOUSELAST pour spécifier le dernier message de la souris.

Utilisez WM_INPUT ici et dans wMsgFilterMin pour spécifier uniquement les messages WM_INPUT.

Si wMsgFilterMin et wMsgFilterMax sont à la fois zéro, GetMessage retourne tous les messages disponibles (autrement dit, aucun filtrage de plage n’est effectué).

Valeur de retour

Type : BOOL

Si la fonction récupère un message autre que WM_QUIT, la valeur de retour est différente de zéro.

Si la fonction récupère le message WM_QUIT, la valeur de retour est égale à zéro.

En cas d’erreur, la valeur de retour est -1. Par exemple, la fonction échoue si hWnd est un handle de fenêtre non valide ou lpMsg est un pointeur non valide. Pour obtenir des informations d’erreur étendues, appelez GetLastError.

Étant donné que la valeur de retour peut être différente de zéro, zéro ou -1, évitez le code comme suit :

while (GetMessage( lpMsg, hWnd, 0, 0)) ...

La possibilité d’une valeur de retour -1 dans le cas où hWnd est un paramètre non valide (par exemple, faire référence à une fenêtre qui a déjà été détruite) signifie que ce code peut entraîner des erreurs d’application irrécupérables. Utilisez plutôt du code comme suit :

BOOL bRet;

while( (bRet = GetMessage( &msg, hWnd, 0, 0 )) != 0)
{ 
    if (bRet == -1)
    {
        // handle the error and possibly exit
    }
    else
    {
        TranslateMessage(&msg); 
        DispatchMessage(&msg); 
    }
}

Remarques

Une application utilise généralement la valeur de retour pour déterminer s’il faut mettre fin à la boucle de message principale et quitter le programme.

La fonction GetMessage récupère les messages associés à la fenêtre identifiée par le paramètre hWnd ou l’un de ses enfants, comme spécifié par la fonction IsChild, et dans la plage de valeurs de message fournies par les paramètres wMsgFilterMin et wMsgFilterMax. Notez qu’une application ne peut utiliser que le mot faible dans les paramètres wMsgFilterMin et wMsgFilterMax ; le mot élevé est réservé au système.

Notez que GetMessage récupère toujours WM_QUIT messages, quelles que soient les valeurs que vous spécifiez pour wMsgFilterMin et wMsgFilterMax.

Pendant cet appel, le système remet des messages en attente, non mis en file d’attente, c’est-à-dire des messages envoyés aux fenêtres appartenant au thread appelant à l’aide du SendMessage, SendMessageCallback, SendMessageTimeoutou SendNotifyMessage fonction. Ensuite, le premier message mis en file d’attente qui correspond au filtre spécifié est récupéré. Le système peut également traiter des événements internes. Si aucun filtre n’est spécifié, les messages sont traités dans l’ordre suivant :

  • Messages envoyés
  • Messages publiés
  • Messages d’entrée (matériel) et événements internes système
  • Messages envoyés (à nouveau)
  • messages WM_PAINT
  • messages WM_TIMER
Pour récupérer les messages d’entrée avant les messages publiés, utilisez les paramètres wMsgFilterMin et wMsgFilterMax.

GetMessage ne supprime pas les messages WM_PAINT de la file d’attente. Les messages restent dans la file d’attente jusqu’à ce qu’ils soient traités.

Si une fenêtre de niveau supérieur cesse de répondre aux messages pendant plus de plusieurs secondes, le système considère que la fenêtre ne répond pas et la remplace par une fenêtre fantôme qui a le même ordre z, emplacement, taille et attributs visuels. Cela permet à l’utilisateur de le déplacer, de le redimensionner ou même de fermer l’application. Toutefois, il s’agit des seules actions disponibles, car l’application ne répond pas réellement. Lorsqu’il est en mode débogueur, le système ne génère pas de fenêtre fantôme.

virtualisation d'ppp

Cette API ne participe pas à la virtualisation DPI. La sortie est en mode de la fenêtre ciblée par le message. Le thread appelant n’est pas pris en compte.

Exemples

Pour obtenir un exemple, consultez Création d’une boucle de message.

Note

L’en-tête winuser.h définit GetMessage comme alias qui sélectionne automatiquement la version ANSI ou Unicode de cette fonction en fonction de la définition de la constante de préprocesseur UNICODE. Le mélange de l’utilisation de l’alias neutre en encodage avec du code qui n’est pas neutre en encodage peut entraîner des incompatibilités qui entraînent des erreurs de compilation ou d’exécution. Pour plus d’informations, consultez Conventions pour les prototypes de fonction.

Exigences

Exigence Valeur
client minimum pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
serveur minimum pris en charge Windows 2000 Server [applications de bureau uniquement]
plateforme cible Windows
d’en-tête winuser.h (include Windows.h)
bibliothèque User32.lib
DLL User32.dll
ensemble d’API ext-ms-win-ntuser-message-l1-1-0 (introduit dans Windows 8)

Voir aussi

conceptuelle

IsChild

msg

messages et files d’attente de messages

PeekMessage

PostMessage

PostThreadMessage

de référence

WaitMessage