SendMessage, fonction (winuser.h)

Envoie le message spécifié à une ou plusieurs fenêtres. La fonction SendMessage appelle la procédure de fenêtre pour la fenêtre spécifiée et ne retourne pas tant que la procédure de fenêtre n’a pas traité le message.

Pour envoyer un message et retourner immédiatement, utilisez la fonction SendMessageCallback ou SendNotifyMessage . Pour publier un message dans la file d’attente de messages d’un thread et le retourner immédiatement, utilisez la fonction PostMessage ou PostThreadMessage .

Syntaxe

LRESULT SendMessage(
  [in] HWND   hWnd,
  [in] UINT   Msg,
  [in] WPARAM wParam,
  [in] LPARAM lParam
);

Paramètres

[in] hWnd

Type : HWND

Handle de la fenêtre dont la procédure de fenêtre recevra le message. Si ce paramètre est HWND_BROADCAST ((HWND)0xffff), le message est envoyé à toutes les fenêtres de niveau supérieur du système, y compris les fenêtres désactivées ou invisibles non propriétaires, les fenêtres superposées et les fenêtres contextuelles ; mais le message n’est pas envoyé aux fenêtres enfants.

L’envoi de messages est soumis à l’UIPI. Le thread d’un processus peut envoyer des messages uniquement à des files d’attente de messages de threads dans des processus de niveau d’intégrité inférieur ou égal.

[in] Msg

Type : UINT

Le message à envoyer.

Pour obtenir la liste des messages fournis par le système, consultez Messages définis par le système.

[in] wParam

Type : WPARAM

Informations supplémentaires spécifiques au message.

[in] lParam

Type : LPARAM

Informations supplémentaires spécifiques au message.

Valeur retournée

Type : LRESULT

La valeur de retour spécifie le résultat du traitement du message ; cela dépend du message envoyé.

Remarques

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

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 de 0 à (WM_USER-1)). Pour envoyer d’autres messages (ceux = >WM_USER) à un autre processus, vous devez effectuer un marshaling personnalisé.

Si la fenêtre spécifiée a été créée par le thread appelant, la procédure de fenêtre est appelée immédiatement en tant que sous-routine. Si la fenêtre spécifiée a été créée par un thread différent, le système bascule vers ce thread et appelle la procédure de fenêtre appropriée. Les messages envoyés entre les threads sont traités uniquement lorsque le thread de réception exécute le code de récupération des messages. Le thread d’envoi est bloqué jusqu’à ce que le thread de réception traite le message. Toutefois, le thread d’envoi traite les messages entrants non mis en file d’attente en attendant que son message soit traité. Pour éviter cela, utilisez SendMessageTimeout avec SMTO_BLOCK défini. Pour plus d’informations sur les messages sans file d’attente, consultez Messages sans file d’attente.

Une application d’accessibilité peut utiliser SendMessage pour envoyer des messages WM_APPCOMMAND à l’interpréteur de commandes afin de lancer des applications. Il n’est pas garanti que cette fonctionnalité fonctionne pour d’autres types d’applications.

Exemples

Pour obtenir un exemple, consultez Affichage d’une entrée clavier.

Configuration requise

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]
Plateforme cible Windows
En-tête winuser.h (inclure 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

Conceptuel

InSendMessage

Messages et files d’attente de messages

PostMessage

PostThreadMessage

Référence

RegisterWindowMessage

SendDlgItemMessage

SendMessageCallback

SendMessageTimeout

SendNotifyMessage