SendMessage-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 die Nachrichtenwarteschlange eines Threads zu posten und sofort zurückzugeben, verwenden Sie die Funktion PostMessage oder PostThreadMessage .

Syntax

LRESULT SendMessage(
  [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 Meldung an alle Fenster der obersten Ebene im System gesendet, einschließlich deaktivierter oder unsichtbarer nicht eigenständiger 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 wurde, auf 5 (Zugriff verweigert) festgelegt.

Anwendungen, die mit HWND_BROADCAST kommunizieren müssen, sollten die RegisterWindowMessage-Funktion verwenden, um eine eindeutige Nachricht für die anwendungsübergreifende Kommunikation zu erhalten.

Das System führt nur Marshalling für Systemmeldungen durch (die 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 den Nachrichtenabrufcode ausführt. Der sendende Thread wird blockiert, bis der empfangende Thread die Nachricht verarbeitet. Der sendende Thread verarbeitet jedoch eingehende, nicht in der Warteschlange stehenden Nachrichten, während er darauf wartet, dass die Nachricht verarbeitet wird. Um dies zu verhindern, verwenden Sie SendMessageTimeout mit festgelegter SMTO_BLOCK. Weitere Informationen zu nachrichten, die nicht in die Warteschlange gestellt werden, finden Sie unter Nicht warteschlangenierte Nachrichten.

Eine Barrierefreiheitsanwendung kann SendMessage verwenden, um WM_APPCOMMAND Nachrichten an die Shell zu senden, um Anwendungen zu starten. Diese Funktionalität funktioniert nicht garantiert für andere Arten von Anwendungen.

Beispiele

Ein Beispiel finden Sie unter Anzeigen der Tastatureingabe.

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 (windows.h einschließen)
Bibliothek User32.lib
DLL User32.dll
APIs ext-ms-win-ntuser-message-l1-1-0 (eingeführt in Windows 8)

Siehe auch

Konzept

InSendMessage

Nachrichten und Nachrichtenwarteschlangen

PostMessage

PostThreadMessage

Referenz

RegisterWindowMessage

SendDlgItemMessage

SendMessageCallback

SendMessageTimeout

SendNotifyMessage