WM_SYSCOMMAND Nachricht
Ein Fenster empfängt diese Meldung, wenn der Benutzer einen Befehl aus dem Menü Fenster (früher als System- oder Steuerungsmenü bezeichnet) oder wenn der Benutzer die Schaltfläche maximieren, die Schaltfläche "Minimieren", die Schaltfläche "Wiederherstellen" oder die Schaltfläche "Schließen" wählt.
#define WM_SYSCOMMAND 0x0112
Beispiel
case WM_SYSCOMMAND:
if ((wParam & 0xFFF0) == SC_CLOSE)
{
EndDialog (hDlg, TRUE);
return(TRUE);
}
break;
Beispiel aus Klassische Windows-Beispiele auf GitHub.
Parameter
-
wParam
-
Der Typ des angeforderten Systembefehls. Dieser Parameter kann einen der folgenden Werte annehmen.
Wert Bedeutung - SC_CLOSE
- 0xF060
Schließt das Fenster. - SC_CONTEXTHELP
- 0xF180
Ändert den Cursor in ein Fragezeichen mit einem Zeiger. Wenn der Benutzer dann im Dialogfeld auf ein Steuerelement klickt, erhält das Steuerelement eine WM_HELP Meldung. - SC_DEFAULT
- 0xF160
Wählt das Standardelement aus. Der Benutzer hat auf das Fenstermenü doppelklicken. - SC_HOTKEY
- 0xF150
Aktiviert das Fenster, das dem von der Anwendung angegebenen Hot Key zugeordnet ist. Der lParam-Parameter identifiziert das zu aktivierende Fenster. - SC_HSCROLL
- 0xF080
Horizontaler Bildlauf. - SCF_ISSECURE
- 0x00000001
Gibt an, ob der Bildschirmschoner sicher ist. - SC_KEYMENU
- 0xF100
Ruft das Fenstermenü als Ergebnis einer Tasteneingabe ab. Weitere Informationen finden Sie im Abschnitt mit Hinweisen. - SC_MAXIMIZE
- 0xF030
Maximiert das Fenster. - SC_MINIMIZE
- 0xF020
Minimiert das Fenster. - SC_MONITORPOWER
- 0xF170
Legt den Status der Anzeige fest. Dieser Befehl unterstützt Geräte mit Energiesparfunktionen, z. B. einen akkubetriebenen Personalcomputer.
Der lParam-Parameter kann die folgenden Werte aufweisen:- -1 (die Anzeige wird eingeschaltet)
- 1 (die Anzeige wird auf wenig Strom)
- 2 (die Anzeige wird ausgeschaltet)
- SC_MOUSEMENU
- 0xF090
Ruft das Fenstermenü als Ergebnis eines Mausklicks ab. - SC_MOVE
- 0xF010
Verschiebt das Fenster. - SC_NEXTWINDOW
- 0xF040
Wechselt zum nächsten Fenster. - SC_PREVWINDOW
- 0xF050
Wechselt zum vorherigen Fenster. - SC_RESTORE
- 0xF120
Stellt die normale Position und Größe des Fensters wieder her. - SC_SCREENSAVE
- 0xF140
Führt die Bildschirmschoneranwendung aus, die im Abschnitt [start] der System.ini-Datei angegeben ist. - SC_SIZE
- 0xF000
Größen des Fensters. - SC_TASKLIST
- 0xF130
Aktiviert das Startmenü . - SC_VSCROLL
- 0xF070
Führt einen vertikalen Bildlauf durch. -
lParam
-
Das Wort mit niedriger Reihenfolge gibt die horizontale Position des Cursors in Bildschirmkoordinaten an, wenn ein Fenstermenübefehl mit der Maus ausgewählt wird. Andernfalls wird dieser Parameter nicht verwendet.
Das Wort mit hoher Reihenfolge gibt die vertikale Position des Cursors in Bildschirmkoordinaten an, wenn ein Fenstermenübefehl mit der Maus ausgewählt wird. Dieser Parameter ist 1, wenn der Befehl mithilfe eines Systembeschleunigers ausgewählt wird, oder null, wenn ein mnemonisches Element verwendet wird.
Rückgabewert
Eine Anwendung sollte null zurückgeben, wenn sie diese Nachricht verarbeitet.
Bemerkungen
Verwenden Sie den folgenden Code, um die Positionskoordinaten in Bildschirmkoordinaten abzurufen:
xPos = GET_X_LPARAM(lParam); // horizontal position
yPos = GET_Y_LPARAM(lParam); // vertical position
Die DefWindowProc-Funktion führt die Fenstermenüanforderung für die vordefinierten Aktionen aus, die in der vorherigen Tabelle angegeben sind.
In WM_SYSCOMMAND Nachrichten werden die vier Bits mit niedriger Reihenfolge des wParam-Parameters intern vom System verwendet. Um beim Testen des Werts von wParam das richtige Ergebnis zu erhalten, muss eine Anwendung den Wert 0xFFF0 mit dem wParam-Wert mithilfe des bitweisen AND-Operators kombinieren.
Die Menüelemente in einem Fenstermenü können mithilfe der Funktionen GetSystemMenu, AppendMenu, InsertMenu, ModifyMenu, InsertMenuItem und SetMenuItemInfo geändert werden. Anwendungen, die das Fenstermenü ändern, müssen WM_SYSCOMMAND Nachrichten verarbeiten.
Eine Anwendung kann jederzeit einen beliebigen Systembefehl ausführen, indem eine WM_SYSCOMMAND-Nachricht an DefWindowProc übergeben wird. Alle WM_SYSCOMMAND Nachrichten, die nicht von der Anwendung verarbeitet werden, müssen an DefWindowProc übergeben werden. Alle von einer Anwendung hinzugefügten Befehlswerte müssen von der Anwendung verarbeitet werden und können nicht an DefWindowProc übergeben werden.
Wenn der Kennwortschutz durch eine Richtlinie aktiviert ist, wird der Bildschirmschoner unabhängig davon gestartet, was eine Anwendung mit der SC_SCREENSAVE Benachrichtigung ausführt, auch wenn er nicht an DefWindowProc übergeben werden kann.
Tastenkombinationen, die zum Auswählen von Elementen aus dem Fenstermenü definiert sind, werden in WM_SYSCOMMAND Nachrichten übersetzt. alle anderen Tastenkombinationen werden in WM_COMMAND Nachrichten übersetzt.
Wenn wParamSC_KEYMENU ist, enthält lParam den Zeichencode des Schlüssels, der mit der ALT-Taste zum Anzeigen des Popupmenüs verwendet wird. Wenn Sie z. B. ALT+F drücken, um das Datei-Popup anzuzeigen, wird eine WM_SYSCOMMAND mit wParam gleich SC_KEYMENU und lParam gleich "f" verursacht.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) |
Windows 2000 Professional [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) |
Windows 2000 Server [nur Desktop-Apps] |
Header |
|