SendMessageW-Funktion (winuser.h)
Sendet die angegebene Nachricht an ein Fenster oder Fenster. Die SendMessage-Funktion ruft die Fensterprozedur für das angegebene Fenster auf und wird erst zurückgegeben, wenn die Fensterprozedur die Nachricht verarbeitet hat.
Um eine Nachricht zu senden und sofort zurückzugeben, verwenden Sie die Funktion SendMessageCallback oder SendNotifyMessage . Um eine Nachricht in der Nachrichtenwarteschlange eines Threads zu posten und sofort zurückzugeben, verwenden Sie die Funktion PostMessage oder PostThreadMessage .
Syntax
LRESULT SendMessageW(
[in] HWND hWnd,
[in] UINT Msg,
[in] WPARAM wParam,
[in] LPARAM lParam
);
Parameter
[in] hWnd
Typ: HWND
Ein Handle für das Fenster, dessen Fensterprozedur die Nachricht empfängt. Wenn dieser Parameter HWND_BROADCAST ((HWND)0xffff) ist, wird die Nachricht an alle Fenster der obersten Ebene im System gesendet, einschließlich deaktivierter oder unsichtbarer nicht vorhandener Fenster, überlappender Fenster und Popupfenster; Die Nachricht wird jedoch nicht an untergeordnete Fenster gesendet.
Das Senden von Nachrichten unterliegt UIPI. Der Thread eines Prozesses kann Nachrichten nur an Nachrichtenwarteschlangen von Threads in Prozessen mit geringerer oder gleicher Integritätsebene senden.
[in] Msg
Typ: UINT
Die zu sendende Nachricht.
Listen der vom System bereitgestellten Nachrichten finden Sie unter Systemdefinierte Nachrichten.
[in] wParam
Typ: WPARAM
Zusätzliche meldungsspezifische Informationen.
[in] lParam
Typ: LPARAM
Zusätzliche meldungsspezifische Informationen.
Rückgabewert
Typ: LRESULT
Der Rückgabewert gibt das Ergebnis der Nachrichtenverarbeitung an. dies hängt von der gesendeten Nachricht ab.
Hinweise
Wenn eine Nachricht von UIPI blockiert wird, wird der letzte Fehler, der mit GetLastError abgerufen wird, auf 5 (Zugriff verweigert) festgelegt.
Anwendungen, die über HWND_BROADCAST kommunizieren müssen, sollten die Funktion RegisterWindowMessage verwenden, um eine eindeutige Nachricht für die Kommunikation zwischen der Anwendung abzurufen.
Das System führt nur Marshalling für Systemmeldungen durch (solche im Bereich von 0 bis (WM_USER-1)). Um andere Nachrichten (diese >= WM_USER) an einen anderen Prozess zu senden, müssen Sie benutzerdefiniertes Marshalling durchführen.
Wenn das angegebene Fenster vom aufrufenden Thread erstellt wurde, wird die Fensterprozedur sofort als Unterroutine aufgerufen. Wenn das angegebene Fenster von einem anderen Thread erstellt wurde, wechselt das System zu diesem Thread und ruft die entsprechende Fensterprozedur auf. Zwischen Threads gesendete Nachrichten werden nur verarbeitet, wenn der empfangende Thread Nachrichtenabrufcode ausführt. Der sendende Thread wird blockiert, bis der empfangende Thread die Nachricht verarbeitet. Der sendende Thread verarbeitet jedoch eingehende, nicht queuierte Nachrichten, während er auf die Verarbeitung seiner Nachricht wartet. Um dies zu verhindern, verwenden Sie SendMessageTimeout mit SMTO_BLOCK festgelegt. Weitere Informationen zu nicht queuierten Nachrichten finden Sie unter Nicht queuierte Nachrichten.
Eine Barrierefreiheitsanwendung kann SendMessage verwenden, um WM_APPCOMMAND Nachrichten an die Shell zu senden, um Anwendungen zu starten. Diese Funktionalität funktioniert nicht für andere Arten von Anwendungen.
Beispiele
Ein Beispiel finden Sie unter Anzeigen von Tastatureingaben.
Hinweis
Der winuser.h-Header definiert SendMessage als Alias, der die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante automatisch auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit nicht codierungsneutralem Code kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows 2000 Professional [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows 2000 Server [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | winuser.h (einschließlich Windows.h) |
Bibliothek | User32.lib |
DLL | User32.dll |
APIs | ext-ms-win-ntuser-message-l1-1-0 (eingeführt in Windows 8) |
Siehe auch
Konzept
Nachrichten und Nachrichtenwarteschlangen
Referenz