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
Winuser.h (einschließlich Windows.h)

Siehe auch

Referenz

AppendMenu

DefWindowProc

GET_X_LPARAM

GET_Y_LPARAM

GetSystemMenu

InsertMenu

ModifyMenu

WM_COMMAND

Konzept

Tastaturkürzel