Partager via


PostMessageW, fonction (winuser.h)

Place (publications) un message dans la file d’attente de messages associée au thread qui a créé la fenêtre spécifiée et retourne sans attendre que le thread traite le message.

Pour publier un message dans la file d’attente de messages associée à un thread, utilisez la fonction PostThreadMessage.

Syntaxe

BOOL PostMessageW(
  [in, optional] HWND   hWnd,
  [in]           UINT   Msg,
  [in]           WPARAM wParam,
  [in]           LPARAM lParam
);

Paramètres

[in, optional] hWnd

Type : HWND

Handle vers la fenêtre dont la procédure de fenêtre est de recevoir le message. Les valeurs suivantes ont des significations spéciales.

Valeur Signification
HWND_BROADCAST
((HWND)0xffff)
Le message est publié sur toutes les fenêtres de niveau supérieur du système, y compris les fenêtres désactivées ou invisibles, les fenêtres superposées et les fenêtres contextuelles. Le message n’est pas publié dans les fenêtres enfants.
ZÉRO
La fonction se comporte comme un appel à PostThreadMessage avec le paramètre dwThreadId défini sur l’identificateur du thread actif.
 

À compter de Windows Vista, la publication de messages est soumise à l’UIPI. Le thread d’un processus peut publier des messages uniquement dans les files d’attente de messages des threads dans les processus de niveau d’intégrité inférieur ou égal.

[in] Msg

Type : uiNT

Message à publier.

Pour obtenir des listes des messages fournis par le système, consultez System-Defined Messages.

[in] wParam

Type : WPARAM

Informations supplémentaires spécifiques aux messages.

[in] lParam

Type : LPARAM

Informations supplémentaires spécifiques aux messages.

Valeur de retour

Type : BOOL

Si la fonction réussit, la valeur de retour est différente de zéro.

Si la fonction échoue, la valeur de retour est égale à zéro. Pour obtenir des informations d’erreur étendues, appelez GetLastError.

Remarques

Lorsqu’un message est bloqué par l’UIPI la dernière erreur, récupérée avec GetLastError, est définie sur 5 (accès refusé).

Les messages d’une file d’attente de messages sont récupérés par des appels à la fonction GetMessage ou fonction PeekMessage.

Les applications qui doivent communiquer à l’aide de HWND_BROADCAST doivent utiliser la fonction RegisterWindowMessage pour obtenir un message unique pour la communication entre applications.

Le système effectue uniquement le marshaling pour les messages système (ceux de la plage 0 à (WM_USER-1)). Pour envoyer d’autres messages (ces >= WM_USER) à un autre processus, vous devez effectuer un marshaling personnalisé.

Si vous envoyez un message dans la plage ci-dessous WM_USER aux fonctions de message asynchrones (postMessage, SendNotifyMessageet SendMessageCallback), ses paramètres de message ne peuvent pas inclure de pointeurs. Sinon, l’opération échoue. Les fonctions retournent avant que le thread de réception ait eu la possibilité de traiter le message et l’expéditeur libère la mémoire avant son utilisation.

Ne publiez pas le message WM_QUIT à l’aide de PostMessage ; utilisez la fonction PostQuitMessage.

Une application d’accessibilité peut utiliser PostMessage pour publier des messages WM_APPCOMMAND dans l’interpréteur de commandes pour lancer des applications. Cette fonctionnalité n’est pas garantie de fonctionner pour d’autres types d’applications.

Il existe une limite de 10 000 messages publiés par file d’attente de messages. Cette limite doit être suffisamment grande. Si votre application dépasse la limite, elle doit être repensée pour éviter de consommer tant de ressources système. Pour ajuster cette limite, modifiez la clé de Registre suivante.

HKEY_LOCAL_MACHINE
   SOFTWARE
      Microsoft
         Windows NT
            CurrentVersion
               Windows
                  USERPostMessageLimit

Si la fonction échoue, appelez GetLastError pour obtenir des informations d’erreur étendues. GetLastError retourne ERROR_NOT_ENOUGH_QUOTA lorsque la limite est atteinte.

La valeur minimale acceptable est 4 000.

Exemples

L’exemple suivant montre comment publier un message de fenêtre privée à l’aide de la fonction PostMessage . Supposons que vous avez défini un message de fenêtre privée appelé WM_COMPLETE:

#define        WM_COMPLETE     (WM_USER + 0)

Vous pouvez publier un message dans la file d’attente de messages associée au thread qui a créé la fenêtre spécifiée, comme indiqué ci-dessous :

 WaitForSingleObject (pparams->hEvent, INFINITE) ;
 lTime = GetCurrentTime () ;
 PostMessage (pparams->hwnd, WM_COMPLETE, 0, lTime);

Pour plus d’exemples, consultez Lancement d’unede liaison de données .

Note

L’en-tête winuser.h définit PostMessage 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

GetMessage

messages et files d’attente de messages

PeekMessage

PostQuitMessage

PostThreadMessage

de référence

RegisterWindowMessage

SendMessageCallback

SendNotifyMessage