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
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
[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
[in] wRemoveMsg
Typ: UINT-
Gibt an, wie Nachrichten verarbeitet werden sollen. Dieser Parameter kann einen oder mehrere der folgenden Werte sein.
Wert | Bedeutung |
---|---|
|
Nachrichten werden nach der Verarbeitung durch PeekMessage-nicht aus der Warteschlange entfernt. |
|
Nachrichten werden nach der Verarbeitung durch PeekMessageaus der Warteschlange entfernt. |
|
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.
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
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
Nachrichten- und Nachrichtenwarteschlangen
andere Ressourcen
Referenz-