当用户从“ 窗口 ”菜单 (以前称为系统菜单或控件菜单) 选择命令时,或者当用户选择“最大化”按钮、最小化按钮、还原按钮或关闭按钮时,窗口会收到此消息。
#define WM_SYSCOMMAND                   0x0112
示例
 case WM_SYSCOMMAND:
        if ((wParam & 0xFFF0) == SC_CLOSE)
        {
            EndDialog (hDlg, TRUE);
            return(TRUE);
        }
        break;
GitHub 上的 Windows 经典示例中的例子。
参数
- 
wParam 
- 
请求的系统命令的类型。 此参数的取值可为下列值之一: 值 含义 - SC_CLOSE
- 0xF060
 关闭窗口。 - SC_CONTEXTHELP
- 0xF180
 使用指针将光标更改为问号。 如果用户随后单击对话框中的控件,该控件将收到 WM_HELP 消息。 - SC_DEFAULT
- 0xF160
 选择默认项;用户双击窗口菜单。 - SC_HOTKEY
- 0xF150
 激活与应用程序指定的热键关联的窗口。 lParam 参数标识要激活的窗口。 - SC_HSCROLL
- 0xF080
 水平滚动。 - SCF_ISSECURE
- 0x00000001
 指示屏幕保护程序是否安全。 - SC_KEYMENU
- 0xF100
 检索作为击键结果的窗口菜单。 有关详细信息,请参见“备注”部分。 - SC_MAXIMIZE
- 0xF030
 最大化窗口。 - SC_MINIMIZE
- 0xF020
 最小化窗口。 - SC_MONITORPOWER
- 0xF170
 设置显示的状态。 此命令支持具有节能功能的设备,例如电池供电的个人计算机。 
 lParam 参数可以具有以下值:- -1 (显示器打开)
- 1 (显示器将进入低功耗)
- 2 (显示器正在关闭)
 - SC_MOUSEMENU
- 0xF090
 检索鼠标单击后窗口菜单。 - SC_MOVE
- 0xF010
 移动窗口。 - SC_NEXTWINDOW
- 0xF040
 移动到下一个窗口。 - SC_PREVWINDOW
- 0xF050
 移动到上一个窗口。 - SC_RESTORE
- 0xF120
 将窗口还原到其正常位置和大小。 - SC_SCREENSAVE
- 0xF140
 执行在 System.ini 文件的 [boot] 节中指定的屏幕保护程序应用程序。 - SC_SIZE
- 0xF000
 调整窗口大小。 - SC_TASKLIST
- 0xF130
 激活“ 开始 ”菜单。 - SC_VSCROLL
- 0xF070
 垂直滚动。 
- 
lParam 
- 
如果用鼠标选择了窗口菜单命令,则低序字指定光标的水平位置(以屏幕坐标表示)。 否则,不使用此参数。 如果用鼠标选择了窗口菜单命令,则高序字指定光标的垂直位置(以屏幕坐标表示)。 如果使用系统加速器选择命令,则此参数为 1;如果使用助记键,则此参数为 0。 
返回值
如果应用程序处理此消息,则应返回零。
备注
若要获取屏幕坐标中的位置坐标,请使用以下代码:
xPos = GET_X_LPARAM(lParam);    // horizontal position 
yPos = GET_Y_LPARAM(lParam);    // vertical position
DefWindowProc 函数对上表中指定的预定义操作执行窗口菜单请求。
在 WM_SYSCOMMAND 消息中, wParam 参数的四个低序位由系统内部使用。 若要在测试 wParam 的值时获得正确的结果,应用程序必须使用按位 AND 运算符将 0xFFF0 值与 wParam 值组合在一起。
可以使用 GetSystemMenu、AppendMenu、InsertMenu、ModifyMenu、InsertMenuItem 和 SetMenuItemInfo 函数修改窗口菜单中的菜单项。 修改窗口菜单的应用程序必须处理 WM_SYSCOMMAND 消息。
应用程序可以通过将 WM_SYSCOMMAND 消息传递给 DefWindowProc,随时执行任何系统命令。 应用程序未处理的任何 WM_SYSCOMMAND 消息都必须传递到 DefWindowProc。 应用程序添加的任何命令值必须由应用程序处理,并且不能传递给 DefWindowProc。
如果策略启用了密码保护,则无论应用程序对 SC_SCREENSAVE 通知执行什么操作,都会启动屏幕保护程序,即使无法将其传递给 DefWindowProc 也是如此。
定义为从窗口菜单中选择项的快捷键将转换为 WM_SYSCOMMAND 消息;所有其他快捷键击都会转换为 WM_COMMAND 消息。
如果 wParamSC_KEYMENU, 则 lParam 包含与 Alt 键一起使用以显示弹出菜单的键的字符代码。 例如,按 Alt+F 显示“文件”弹出窗口将导致 wParam 等于 SC_KEYMENU 且 lParam 等于“f”的WM_SYSCOMMAND。
要求
| 要求 | 值 | 
|---|---|
| 最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] | 
| 最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] | 
| 标头 | 
 |