Freigeben über


PostMessageW-Funktion (winuser.h)

Platziert (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.

Verwenden Sie die PostThreadMessage--Funktion, um eine Nachricht in der Nachrichtenwarteschlange zu veröffentlichen, die einem Thread zugeordnet ist.

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 empfängt. Die folgenden Werte haben besondere Bedeutungen.

Wert Bedeutung
HWND_BROADCAST
((HWND)0xffff)
Die Nachricht wird in allen Fenstern der obersten Ebene im System gepostet, einschließlich deaktivierter oder unsichtbarer nicht verworrener Fenster, überlappenden Fenstern und Popupfenstern. Die Nachricht wird nicht in untergeordnete Fenster gepostet.
NULL
Die Funktion verhält sich wie ein Aufruf von PostThreadMessage-, wobei die dwThreadId Parameter auf den Bezeichner des aktuellen Threads festgelegt ist.
 

Ab Windows Vista unterliegt die Veröffentlichung von Nachrichten 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 System-Defined Nachrichten.

[in] wParam

Typ: WPARAM-

Zusätzliche nachrichtenspezifische Informationen.

[in] lParam

Typ: LPARAM-

Zusätzliche nachrichtenspezifische Informationen.

Rückgabewert

Typ: BOOL-

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

Wenn die Funktion fehlschlägt, ist der Rückgabewert null. Rufen Sie GetLastErrorauf, um erweiterte Fehlerinformationen zu erhalten.

Bemerkungen

Wenn eine Nachricht vom UIPI blockiert wird, wird der letzte Fehler mit GetLastErrorabgerufen, auf 5 festgelegt (Zugriff verweigert).

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

Anwendungen, die mithilfe von HWND_BROADCAST kommunizieren müssen, sollten die RegisterWindowMessage--Funktion verwenden, um eine eindeutige Nachricht für die Kommunikation zwischen Anwendungen zu erhalten.

Das System marshallt nur für Systemmeldungen (die im Bereich 0 bis (WM_USER-1)). Um andere Nachrichten (die >= WM_USER) an einen anderen Prozess zu senden, müssen Sie benutzerdefinierte Marshalling durchführen.

Wenn Sie eine Nachricht im folgenden Bereich WM_USER an die asynchronen Nachrichtenfunktionen senden (PostMessage, SendNotifyMessageund SendMessageCallback), können die zugehörigen 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 PostMessage-; verwenden Sie die funktion PostQuitMessage.

Eine Barrierefreiheitsanwendung kann PostMessage- verwenden, um WM_APPCOMMAND Nachrichten in der Shell zu veröffentlichen, um Anwendungen zu starten. Diese Funktionalität ist nicht garantiert für andere Anwendungstypen geeignet.

Es gibt eine Beschränkung von 10.000 geposteten Nachrichten pro Nachrichtenwarteschlange. Dieser Grenzwert sollte ausreichend groß sein. Wenn Ihre Anwendung den Grenzwert überschreitet, sollte sie neu gestaltet werden, um zu vermeiden, dass so viele Systemressourcen verbraucht werden. Um diesen Grenzwert 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 der Grenzwert erreicht wird.

Der mindest zulässige Wert ist 4000.

Beispiele

Das folgende Beispiel zeigt, wie Sie eine private Fensternachricht mithilfe der PostMessage--Funktion posten. Angenommen, Sie haben eine private Fensternachricht namens WM_COMPLETEdefiniert:

#define        WM_COMPLETE     (WM_USER + 0)

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

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

Weitere Beispiele finden Sie unter Initiieren eines Datenlinks.

Anmerkung

Der winuser.h-Header definiert PostMessage 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 Code, der nicht codierungsneutral ist, 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
mindestens unterstützte Client- Windows 2000 Professional [nur Desktop-Apps]
mindestens unterstützte Server- Windows 2000 Server [nur Desktop-Apps]
Zielplattform- Fenster
Header- winuser.h (enthalten Windows.h)
Library User32.lib
DLL- User32.dll
API-Satz ext-ms-win-ntuser-message-l1-1-0 (eingeführt in Windows 8)

Siehe auch

Konzeptionelle

GetMessage-

Nachrichten- und Nachrichtenwarteschlangen

PeekMessage-

PostQuitMessage-

PostThreadMessage-

Referenz-

RegisterWindowMessage

SendMessageCallback-

SendNotifyMessage-