SysGet

获取屏幕分辨率, 多显示器信息, 系统对象的尺寸和其他系统属性.

SysGet, OutputVar, SubCommand , Value

OutputVar 参数是用来存储结果的输出变量的名称. SubCommandValue 互相依赖, 其用法描述如下.

子命令

对于 SubCommand, 指定以下命令之一:

MonitorCount

检索监视器的总数.

SysGet, OutputVar, MonitorCount

与下表提到的 SM_CMONITORS 不同, 这子命令包括所有的监视器, 甚至没有被用作桌面的部分也包括.

MonitorPrimary

检索主监视器的编号.

SysGet, OutputVar, MonitorPrimary

在单监示器系统上这个编号总是 1.

Monitor

获取编号为 N 的监视器的边界坐标.

SysGet, OutputVar, Monitor , N

如果 N 为空或省略, 则使用主监视器. 获取的结果保存在四个名称以 OutputVar 开始的变量中. 如果 N 太大或获取信息时遇到问题, 那么这些变量都被置空. 例如:

SysGet, Mon2, Monitor, 2
MsgBox, Left: %Mon2Left% -- Top: %Mon2Top% -- Right: %Mon2Right% -- Bottom %Mon2Bottom%.

函数中, 要创建一组全局变量而不是局部变量, 请在此命令前声明 Mon2 为全局变量(对于假设全局函数, 反之亦成). 但是, 通常需要对每个变量进行声明, 否则可能造成混乱的根源.

MonitorWorkArea

获取编号为 N 的监视器的工作区域的边界坐标.

SysGet, OutputVar, MonitorWorkArea , N

与上面的 Monitor 子命令相同, 除了该区域不包括任务栏和其他注册的桌面工具栏占用的空间.

MonitorName

检索操作系统的监视器号 N 的名称.

SysGet, OutputVar, MonitorName , N

如果 N 为空或省略, 则使用主监视器.

(Numeric)

指定 SubCommand 为下表其中的一个数字来获取相应的值.

SysGet, OutputVar, N

例如, SysGet, MouseButtonCount, 43 会保存鼠标按钮的数目到变量 MouseButtonCount.

常用的

数字 说明
80 SM_CMONITORS: 桌面上监视器数目(不包括 "不显示的伪监视器").
43 SM_CMOUSEBUTTONS: 鼠标按钮的数目(没有安装鼠标则为 0).
16, 17 SM_CXFULLSCREEN, SM_CYFULLSCREEN: 在主监视器上全屏窗口工作区的宽度和高度, 单位为像素.
61, 62 SM_CXMAXIMIZED, SM_CYMAXIMIZED: 主监视器上已最大化的顶层窗口的尺寸, 单位为像素.
59, 60 SM_CXMAXTRACK, SM_CYMAXTRACK: 包含标题和可调整大小边框的窗口的默认最大尺寸, 单位为像素. 这个度量指向整个桌面. 用户无法拖动窗口边框超过这些尺寸指定的大小.
28, 29 SM_CXMIN, SM_CYMIN: 窗口的最小宽度和高度, 单位为像素.
57, 58 SM_CXMINIMIZED, SM_CYMINIMIZED: 已最小化的窗口的尺寸, 单位为像素.
34, 35 SM_CXMINTRACK, SM_CYMINTRACK: 窗口的最小跟踪宽度和高度, 单位为像素. 用户无法拖动窗口边框小于这些尺寸指定的大小. 窗口可以通过处理 WM_GETMINMAXINFO 消息来覆盖这些值.
0, 1 SM_CXSCREEN, SM_CYSCREEN: 主监视器屏幕的宽度和高度, 单位为像素. 这两个值等同于内置变量 A_ScreenWidthA_ScreenHeight.
78, 79 SM_CXVIRTUALSCREEN, SM_CYVIRTUALSCREEN: 虚拟屏幕的宽度和高度, 单位为像素. 虚拟屏幕是所有监视器的边框. SM_XVIRTUALSCREEN, SM_YVIRTUALSCREEN(下面 76, 77 条目) 指标是虚拟屏幕左上角的坐标.
19 SM_MOUSEPRESENT: 如果安装了鼠标则为非零值, 否则为零.
75 SM_MOUSEWHEELPRESENT: 如果安装了带滚轮的鼠标则为非零值, 否则为零.
63 SM_NETWORK: 网络存在时设置最低的有效位, 否则进行清除. 其他位保留供将来使用.
8193 SM_REMOTECONTROL: 此系统度量用于终端服务环境. 如果当前的会话是由远程控制的则它的值不为零; 否则为零.
4096 SM_REMOTESESSION: 此系统度量用于终端服务环境. 如果调用线程与终端服务的客户端会话关联, 则返回非零值. 如果调用线程与终端服务的控制台会话关联, 则返回零. 控制台会话不一定是实际的控制台.
70 SM_SHOWSOUNDS: 如果用户要求一个原本只提供声音信息的场合中同时提供可视化信息时为非零值, 否则为零.
8192 SM_SHUTTINGDOWN: 当前会话正在关闭时为非零值, 否则为零. Windows 2000: 获取的值总是 0.
23 SM_SWAPBUTTON: 交换了鼠标左右键的功能时为非零值, 否则为零.
76, 77 SM_XVIRTUALSCREEN, SM_YVIRTUALSCREEN: 虚拟屏幕左边和顶部的坐标. 虚拟屏幕是所有监视器的边框. 与之相比, SM_CXVIRTUALSCREEN, SM_CYVIRTUALSCREEN 指标(上面 78, 79 条目) 为虚拟屏幕的宽度和高度.

不常用的

数字 说明
56 SM_ARRANGE: 指定系统排列最小化窗口方式的标志. 请参阅 Microsoft Docs 了解更多信息.
67

SM_CLEANBOOT: 指定系统启动的方式:

  • 0 = 正常启动
  • 1 = 失败-安全模式启动
  • 2 = 失败-带网络的安全模式启动
5, 6 SM_CXBORDER, SM_CYBORDER: 窗口边框的宽度和高度, 单位为像素. 对于 3D 外观的窗口, 这相当于它的 SM_CXEDGE 值.
13, 14 SM_CXCURSOR, SM_CYCURSOR: 光标的宽度和高度, 单位为像素. 系统无法创建其他大小的光标.
36, 37 SM_CXDOUBLECLK, SM_CYDOUBLECLK: 在双击序列中首次点击位置周围矩形的宽度和高度, 单位为像素. 第二次点击只有出现在这个矩形内才会被系统认为这两次点击为双击.(两次点击还必须发生在指定的时间内.)
68, 69 SM_CXDRAG, SM_CYDRAG: 以拖动点为中心, 在拖动操作开始前允许鼠标指针在其中进行有限的移动的矩形的宽度和高度. 这些值的单位为像素. 这允许用户方便地点击和释放鼠标按钮而不会意外开始拖动操作.
45, 46 SM_CXEDGE, SM_CYEDGE: 3D 边框的尺寸, 单位为像素. 它们是 SM_CXBORDER 和 SM_CYBORDER 的 3D 副本.
7, 8 SM_CXFIXEDFRAME, SM_CYFIXEDFRAME(与 SM_CXDLGFRAME, SM_CYDLGFRAME 含义相同): 含标题栏而不可调整大小的窗口的边框厚度, 单位为像素. SM_CXFIXEDFRAME 为水平边界的高度, 而 SM_CYFIXEDFRAME 为垂直边界的宽度.
83, 84 SM_CXFOCUSBORDER, SM_CYFOCUSBORDER: 控件的焦点矩形的左右边缘的宽度和上下边缘的高度, 单位为像素. Windows 2000: 获取的值总是 0.
21, 3 SM_CXHSCROLL, SM_CYHSCROLL: 水平滚动条上箭头位图的宽度, 单位为像素; 垂直滚动条的高度, 单位为像素.
10 SM_CXHTHUMB: 水平滚动条中滚动块的宽度, 单位为像素.
11, 12 SM_CXICON, SM_CYICON: 图标的默认宽度和高度, 单位为像素.
38, 39 SM_CXICONSPACING, SM_CYICONSPACING: 大图标视图中项目网格单元格的尺寸, 单位为像素. 排列时每个项目会对齐到这个大小的矩形中. 这两个值总是大于或等于 SM_CXICON 和 SM_CYICON.
71, 72 SM_CXMENUCHECK, SM_CYMENUCHECK: 默认菜单复选标记位图的尺寸, 单位为像素.
54, 55 SM_CXMENUSIZE, SM_CYMENUSIZE: 菜单栏按钮的尺寸, 例如多文档界面中使用的子窗口的关闭按钮, 单位为像素.
47, 48 SM_CXMINSPACING SM_CYMINSPACING: 已最小化窗口的网格单元格的尺寸, 单位为像素. 排列时每个已最小化的窗口会对齐到这个大小的矩形中. 这两个值总是大于或等于 SM_CXMINIMIZED 和 SM_CYMINIMIZED.
30, 31 SM_CXSIZE, SM_CYSIZE: 窗口标题文字或标题栏按钮的宽度和高度, 单位为像素.
32, 33 SM_CXSIZEFRAME, SM_CYSIZEFRAME: 可调整大小窗口周围可调整边框的厚度, 单位为像素. SM_CXSIZEFRAME 为水平边框的宽度, 而 SM_CYSIZEFRAME 为垂直边框的高度. 与 SM_CXFRAME 和 SM_CYFRAME 含义相同.
49, 50 SM_CXSMICON, SM_CYSMICON: 小图标的推荐尺寸, 单位为像素. 小图标一般出现在窗口标题和小图标视图中.
52, 53 SM_CXSMSIZE SM_CYSMSIZE: 小标题按钮的尺寸, 单位为像素.
2, 20 SM_CXVSCROLL, SM_CYVSCROLL: 垂直滚动条的宽度, 单位为像素; 垂直滚动条上箭头位图的高度, 单位为像素.
4 SM_CYCAPTION: 标题区域的高度, 单位为像素.
18 SM_CYKANJIWINDOW: 对于双字节字符集版本的系统, 这是在屏幕底部的 Kanji 窗口的高度, 单位为像素.
15 SM_CYMENU: 单行菜单栏的高度, 单位为像素.
51 SM_CYSMCAPTION: 小标题的高度, 单位为像素.
9 SM_CYVTHUMB: 垂直滚动条滚动块的高度, 单位为像素.
42 SM_DBCSENABLED: 当 User32.dll 支持 DBCS 时为非零值; 否则为零.
22 SM_DEBUG: 如果安装了调试版本的 User.exe 则为非零值; 否则为零.
82

SM_IMMENABLED: 如果启用了输入法管理器/输入法编辑器则为非零值; 否则为零.

SM_IMMENABLED 表示系统是否准备在 Unicode 程序中使用基于 Unicode 的输入法. 要确保语言依赖的输入法可用, 请检查 SM_DBCSENABLED 和系统 ANSI 代码页. 否则 ANSI 到 Unicode 的转换可能无法正确执行, 或者不存在某些组件, 例如字体或注册表设置.

87 SM_MEDIACENTER: 如果当前操作系统为 Windows XP Media Center Edition 时为非零值, 如果不是则为零.
40 SM_MENUDROPALIGNMENT: 如果下拉菜单与相应的菜单项右对齐时为非零值; 而左对齐时为零.
74 SM_MIDEASTENABLED: 如果系统启用了希伯来和阿拉伯语言则为非零值, 如果没有则为零.
41 SM_PENWINDOWS: 如果安装了 Microsoft Windows for Pen computing 扩展则为非零值; 否则为零.
44 SM_SECURE: 如果存在安全支持则为非零值; 否则为零.
81 SM_SAMEDISPLAYFORMAT: 如果所有的监视器使用相同的颜色格式则为非零值, 否则为零. 请注意两个显示器中可以含有相同的位深度而不同的颜色格式. 例如, 红, 绿和蓝像素可以使用不同的位数进行编码, 或者这些位可能位于像素颜色值的不同地方.
86 SM_TABLETPC: 如果当前操作系统为 Windows XP Tablet PC 版本时为非零值, 如果不是则为零.

备注

内置变量 A_ScreenWidthA_ScreenHeight 包含了主监视器的尺寸, 单位为像素.

DllCall(), WinGet

示例

检索鼠标按钮的数量, 并将其存储在 MouseButtonCount 中.

SysGet, MouseButtonCount, 43

读取虚拟屏幕的宽度和高度, 并将其存储在 VirtualScreenWidthVirtualScreenHeight 中.

SysGet, VirtualScreenWidth, 78
SysGet, VirtualScreenHeight, 79

显示每个监视器的信息.

SysGet, MonitorCount, MonitorCount
SysGet, MonitorPrimary, MonitorPrimary
MsgBox, Monitor Count:`t%MonitorCount%`nPrimary Monitor:`t%MonitorPrimary%
Loop, %MonitorCount%
{
    SysGet, MonitorName, MonitorName, %A_Index%
    SysGet, Monitor, Monitor, %A_Index%
    SysGet, MonitorWorkArea, MonitorWorkArea, %A_Index%
    MsgBox, Monitor:`t#%A_Index%`nName:`t%MonitorName%`nLeft:`t%MonitorLeft% (%MonitorWorkAreaLeft% work)`nTop:`t%MonitorTop% (%MonitorWorkAreaTop% work)`nRight:`t%MonitorRight% (%MonitorWorkAreaRight% work)`nBottom:`t%MonitorBottom% (%MonitorWorkAreaBottom% work)
}