PostMessageW-Funktion (winuser.h)

Places (postet) eine Nachricht in der Nachrichtenwarteschlange, die dem Thread zugeordnet ist, der das angegebene Fenster erstellt hat, und gibt zurück, ohne darauf zu warten, dass der Thread die Nachricht verarbeitet.

Um eine Nachricht in der Nachrichtenwarteschlange zu posten, die einem Thread zugeordnet ist, verwenden Sie die Funktion PostThreadMessage .

Syntax

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

Parameter

[in, optional] hWnd

Typ: HWND

Ein Handle für das Fenster, dessen Fensterprozedur die Nachricht empfangen soll. Die folgenden Werte haben eine besondere Bedeutung.

Wert Bedeutung
HWND_BROADCAST
((HWND)0xffff)
Die Nachricht wird an alle fenster der obersten Ebene im System gesendet, einschließlich deaktivierter oder unsichtbarer nichtowned Fenster, überlappender Fenster und Popupfenster. Die Nachricht wird nicht an untergeordnete Fenster gesendet.
NULL
Die Funktion verhält sich wie ein Aufruf von PostThreadMessage , wenn der dwThreadId-Parameter auf den Bezeichner des aktuellen Threads festgelegt ist.
 

Ab Windows Vista unterliegt die Veröffentlichung von Nachrichten der UIPI. Der Thread eines Prozesses kann Nachrichten nur in Nachrichtenwarteschlangen von Threads in Prozessen mit geringerer oder gleicher Integritätsebene posten.

[in] Msg

Typ: UINT

Die nachricht, die gepostet werden soll.

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: BOOL

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null.

Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.

Hinweise

Wenn eine Nachricht von UIPI blockiert wird, wird der letzte Fehler, der mit GetLastError abgerufen wird, auf 5 (Zugriff verweigert) festgelegt.

Nachrichten in einer Nachrichtenwarteschlange werden durch Aufrufe der Funktion GetMessage oder PeekMessage abgerufen.

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 Sie eine Nachricht im folgenden Bereich WM_USER an die asynchronen Nachrichtenfunktionen (PostMessage, SendNotifyMessage und SendMessageCallback) senden, können die Nachrichtenparameter keine Zeiger enthalten. Andernfalls schlägt der Vorgang fehl. Die Funktionen werden zurückgegeben, bevor der empfangende Thread die Möglichkeit hatte, die Nachricht zu verarbeiten, und der Absender gibt den Speicher frei, bevor er verwendet wird.

Posten Sie die WM_QUIT Nachricht nicht mithilfe von PostMessage. verwenden Sie die PostQuitMessage-Funktion .

Eine Barrierefreiheitsanwendung kann PostMessage 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.

Es gibt ein Limit von 10.000 gesendeten Nachrichten pro Nachrichtenwarteschlange. Dieser Grenzwert sollte ausreichend hoch sein. Wenn Ihre Anwendung den Grenzwert überschreitet, sollte sie neu gestaltet werden, um zu vermeiden, dass so viele Systemressourcen verbraucht werden. Um dieses Limit anzupassen, ändern Sie den folgenden Registrierungsschlüssel.

HKEY_LOCAL_MACHINE
   SOFTWARE
      Microsoft
         Windows NT
            CurrentVersion
               Windows
                  USERPostMessageLimit

Wenn die Funktion fehlschlägt, rufen Sie GetLastError auf, um erweiterte Fehlerinformationen abzurufen. GetLastError gibt ERROR_NOT_ENOUGH_QUOTA zurück, wenn das Limit erreicht wird.

Der zulässige Mindestwert ist 4000.

Beispiele

Im folgenden Beispiel wird gezeigt, wie Sie mithilfe der PostMessage-Funktion eine Nachricht im privaten Fenster posten. Angenommen, Sie haben eine private Fensternachricht mit dem Namen WM_COMPLETE definiert:

#define        WM_COMPLETE     (WM_USER + 0)

Sie können eine Nachricht in der Nachrichtenwarteschlange posten, die dem Thread zugeordnet ist, der das angegebene Fenster erstellt hat, wie unten gezeigt:

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

Weitere Beispiele finden Sie unter Initiieren einer Datenverbindung.

Hinweis

Der winuser.h-Header definiert PostMessage als Alias, der automatisch die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante 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

GetMessage

Nachrichten und Nachrichtenwarteschlangen

PeekMessage

PostQuitMessage

PostThreadMessage

Referenz

RegisterWindowMessage

SendMessageCallback

SendNotifyMessage