Freigeben über


PeekMessageW-Funktion (winuser.h)

Verteilt eingehende nicht abgefragte Nachrichten, überprüft die Threadnachrichtenwarteschlange auf eine gepostete Nachricht und ruft die Nachricht ab (sofern vorhanden).

Syntax

BOOL PeekMessageW(
  [out]          LPMSG lpMsg,
  [in, optional] HWND  hWnd,
  [in]           UINT  wMsgFilterMin,
  [in]           UINT  wMsgFilterMax,
  [in]           UINT  wRemoveMsg
);

Parameter

[out] lpMsg

Typ: LPMSG-

Ein Zeiger auf eine MSG- Struktur, die Nachrichteninformationen empfängt.

[in, optional] hWnd

Typ: HWND-

Ein Handle für das Fenster, dessen Nachrichten abgerufen werden sollen. Das Fenster muss zum aktuellen Thread gehören.

Wenn hWnd- NULL-ist, ruft PeekMessage Nachrichten für jedes Fenster ab, das zum aktuellen Thread gehört, und alle Nachrichten in der Nachrichtenwarteschlange des aktuellen Threads, deren hwnd Wert NULL- ist (siehe MSG- Struktur). Wenn hWnd NULL-ist, werden daher sowohl Fensternachrichten als auch Threadnachrichten verarbeitet.

Wenn hWnd- -1 ist, PeekMessage ruft nur Nachrichten in der Nachrichtenwarteschlange des aktuellen Threads ab, deren hwnd Wert NULList, d. h. Threadnachrichten, die von PostMessage gepostet werden (wenn der hWnd Parameter NULL) oder PostThreadMessage.

[in] wMsgFilterMin

Typ: UINT-

Der Wert der ersten Nachricht im Bereich der zu untersuchenden Nachrichten. Verwenden Sie WM_KEYFIRST (0x0100), um die erste Tastaturnachricht oder WM_MOUSEFIRST (0x0200) anzugeben, um die erste Mausnachricht anzugeben.

Wenn wMsgFilterMin und wMsgFilterMax- beide null sind, gibt PeekMessage alle verfügbaren Nachrichten zurück (d. a. es wird keine Bereichsfilterung ausgeführt).

[in] wMsgFilterMax

Typ: UINT-

Der Wert der letzten Nachricht im Bereich der zu untersuchenden Nachrichten. Verwenden Sie WM_KEYLAST, um die letzte Tastaturnachricht oder WM_MOUSELAST anzugeben, um die letzte Mausnachricht anzugeben.

Wenn wMsgFilterMin und wMsgFilterMax- beide null sind, gibt PeekMessage alle verfügbaren Nachrichten zurück (d. a. es wird keine Bereichsfilterung ausgeführt).

[in] wRemoveMsg

Typ: UINT-

Gibt an, wie Nachrichten verarbeitet werden sollen. Dieser Parameter kann einen oder mehrere der folgenden Werte sein.

Wert Bedeutung
PM_NOREMOVE
0x0000
Nachrichten werden nach der Verarbeitung durch PeekMessage-nicht aus der Warteschlange entfernt.
PM_REMOVE
0x0001
Nachrichten werden nach der Verarbeitung durch PeekMessageaus der Warteschlange entfernt.
PM_NOYIELD
0x0002
Verhindert, dass das System einen Thread freigibt, der auf den Leerlauf des Aufrufers wartet (siehe WaitForInputIdle).

Kombinieren Sie diesen Wert entweder mit PM_NOREMOVE oder PM_REMOVE.

 

Standardmäßig werden alle Nachrichtentypen verarbeitet. Um anzugeben, dass nur bestimmte Nachrichten verarbeitet werden sollen, geben Sie einen oder mehrere der folgenden Werte an.

Wert Bedeutung
PM_QS_INPUT
(QS_INPUT << 16)
Verarbeiten von Maus- und Tastaturmeldungen.
PM_QS_PAINT
(QS_PAINT << 16)
Verarbeiten von Paint-Nachrichten.
PM_QS_POSTMESSAGE
((QS_POSTMESSAGE | QS_HOTKEY | QS_TIMER) << 16)
Verarbeiten aller geposteten Nachrichten, einschließlich Timern und Hotkeys.
PM_QS_SENDMESSAGE
(QS_SENDMESSAGE << 16)
Verarbeiten aller gesendeten Nachrichten.

Rückgabewert

Typ: BOOL-

Wenn eine Nachricht verfügbar ist, ist der Rückgabewert ungleich Null.

Wenn keine Nachrichten verfügbar sind, ist der Rückgabewert null.

Bemerkungen

PeekMessage Nachrichten abruft, die dem fenster zugeordnet sind, das durch den hWnd Parameter oder eines seiner untergeordneten Elemente gemäß der funktion IsChild und innerhalb des Bereichs der Nachrichtenwerte der wMsgFilterMin und wMsgFilterMax Parameter angegeben ist. Beachten Sie, dass eine Anwendung nur das niedrige Wort im wMsgFilterMin- und wMsgFilterMax Parameter verwenden kann; das hohe Wort ist für das System reserviert.

Beachten Sie, dass PeekMessage immer WM_QUIT Nachrichten abruft, unabhängig davon, welche Werte Sie für wMsgFilterMin und wMsgFilterMaxangeben.

Während dieses Aufrufs sendet das System (DispatchMessage) ausstehende, nicht abgefragte Nachrichten, d. h. Nachrichten, die an Fenster gesendet werden, die dem aufrufenden Thread gehören, mithilfe der SendMessage, SendMessageCallback, SendMessageTimeoutoder SendNotifyMessage Funktion. Anschließend wird die erste nachricht in die Warteschlange gestellt, die dem angegebenen Filter entspricht. Das System kann auch interne Ereignisse verarbeiten. Wenn kein Filter angegeben ist, werden Nachrichten in der folgenden Reihenfolge verarbeitet:

  • Gesendete Nachrichten
  • Gepostete Nachrichten
  • Eingabemeldungen (Hardware) und interne Systemereignisse
  • Gesendete Nachrichten (erneut)
  • WM_PAINT Nachrichten
  • WM_TIMER Nachrichten
Verwenden Sie zum Abrufen von Eingabemeldungen vor geposteten Nachrichten die parameter wMsgFilterMin und wMsgFilterMax.

Die funktion PeekMessage entfernt normalerweise nicht WM_PAINT Nachrichten aus der Warteschlange. WM_PAINT Nachrichten verbleiben in der Warteschlange, bis sie verarbeitet werden. Wenn eine WM_PAINT Nachricht jedoch einen NULL- Aktualisierungsbereich aufweist, entfernt PeekMessage- sie aus der Warteschlange.

Wenn ein Fenster auf oberster Ebene länger als mehrere Sekunden nicht mehr auf Nachrichten reagiert, berücksichtigt das System, dass das Fenster nicht reagiert und durch ein Geisterfenster ersetzt wird, das die gleiche Z-Reihenfolge, Position, Größe und visuelle Attribute aufweist. Auf diese Weise kann der Benutzer sie verschieben, seine Größe ändern oder die Anwendung sogar schließen. Dies sind jedoch die einzigen Verfügbaren Aktionen, da die Anwendung tatsächlich nicht reagiert. Wenn eine Anwendung gedebuggt wird, generiert das System kein Geisterfenster.

DPI-Virtualisierung

Diese API nimmt nicht an der DPI-Virtualisierung teil. Die Ausgabe befindet sich im Modus des Fensters, auf das die Nachricht ausgerichtet ist. Der aufrufende Thread wird nicht berücksichtigt.

Beispiele

Ein Beispiel finden Sie unter Untersuchen einer Nachrichtenwarteschlange.

Anmerkung

Der winuser.h-Header definiert PeekMessage 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-

IsChild

MSG-

Nachrichten- und Nachrichtenwarteschlangen

andere Ressourcen

Referenz-

WaitForInputIdle-

WaitMessage-