GetSystemMetrics 以及其参数
前言
在写屏幕截图程序的时候,为了适应多屏场景,需要一些屏幕的信息,于是查到了 GetSystemMetrics 函数,次函数的参数很多,所以就打算把这些翻译一下,翻译主要是用的Google翻译,如有不妥的支持还请包涵。同时再次特别感谢:Google 翻译。
GetSystemMetrics 功能
检索指定的系统度量标准或系统配置设置。
请注意,GetSystemMetrics检索的所有维度都以像素为单位。
参数
要检索的系统度量标准或配置设置。 此参数可以是以下值之一。 请注意,所有SM_CX *值都是宽度,所有SM_CY *值都是高度。 另请注意,所有用于返回布尔数据的设置都表示TRUE为任何非零值,FALSE表示为零值。
MSDN 原文链接:
https://msdn.microsoft.com/zh-cn/library/windows/desktop/ms724385(v=vs.85).aspx
值 | 解释 |
SM_ARRANGE 56 | 指定系统如何排列最小化窗口的标志。 有关更多信息,请参阅本主题中的"备注"部分 |
SM_CLEANBOOT 67 | 指示系统的启动方式:
故障安全启动(也称为SafeBoot,安全模式或干净启动)会绕过用户启动文件 |
SM_CMONITORS 80 | 桌面上的显示器数量。 有关更多信息,请参阅本主题中的"备注"部分。 |
SM_CMOUSEBUTTONS 43 | 鼠标上的按钮数量,如果没有安装鼠标,则为零。 |
SM_CONVERTIBLESLATEMODE 0x2003 | 反映笔记本电脑或平板模式的状态,0表示平板模式,否则为非零。 当此系统指标发生变化时,系统通过WM_SETTINGCHANGE在LPARAM中发送带有"ConvertibleSlateMode"的广播消息。 请注意,此系统指标不适用于台式PC。 在这种情况下,请使用GetAutoRotationState。 |
SM_CXBORDER 5 | 窗口边框的宽度(以像素为单位)。 这相当于具有3-D外观的窗口的SM_CXEDGE值。 |
SM_CXCURSOR 13 | 光标的宽度,以像素为单位。 系统无法创建其他大小的游标。 |
SM_CXDLGFRAME 7 | 同 SM_CXFIXEDFRAME. |
SM_CXDOUBLECLK 36 | 双击序列中第一次单击位置周围的矩形宽度(以像素为单位)。 第二次单击必须出现在由SM_CXDOUBLECLK和SM_CYDOUBLECLK定义的矩形内,以便系统考虑双击两次单击。 两次单击也必须在指定时间内发生。 要设置双击矩形的宽度,请使用SPI_SETDOUBLECLKWIDTH调用SystemParametersInfo。 |
SM_CXDRAG 68 | 鼠标指针在拖动操作开始之前可以移动的鼠标指向任意一侧的像素数。 这允许用户轻松地单击和释放鼠标按钮而不会无意中开始拖动操作。 如果此值为负,则从鼠标按下点的左侧减去该值并将其添加到其右侧。 |
SM_CXEDGE 45 | 三维边框的宽度(以像素为单位)。 该指标是SM_CXBORDER的3-D对应物。 |
SM_CXFIXEDFRAME 7 | 围绕窗口周边的框架的厚度,其具有标题但不是相当大的像素。 SM_CXFIXEDFRAME是水平边框的高度,SM_CYFIXEDFRAME是垂直边框的宽度。 该值与SM_CXDLGFRAME相同。 |
SM_CXFOCUSBORDER 83 | DrawFocusRect绘制的焦点矩形的左右边缘的宽度。 该值以像素为单位。 Windows 2000:不支持此值。 |
SM_CXFRAME 32 | 同 SM_CXSIZEFRAME. |
SM_CXFULLSCREEN 16 | 主显示器监视器上全屏窗口的客户端区域宽度(以像素为单位)。 要获取未被系统任务栏或应用程序桌面工具栏遮挡的屏幕部分的坐标,请使用SPI_GETWORKAREA值调用SystemParametersInfo函数。 |
SM_CXHSCROLL 21 | 水平滚动条上箭头位图的宽度(以像素为单位)。 |
SM_CXHTHUMB 10 | 水平滚动条中拇指框的宽度,以像素为单位。 |
SM_CXICON 11 | 图标的默认宽度(以像素为单位)。 LoadIcon函数只能加载具有SM_CXICON和SM_CYICON指定维度的图标。 |
SM_CXICONSPACING 38 | 大图标视图中项目的网格单元格的宽度,以像素为单位。 安排时,每个项目都适合SM_CYICONSPACING的SM_CXICONSPACING大小的矩形。 该值始终大于或等于SM_CXICON。 |
SM_CXMAXIMIZED 61 | 主显示器上最大化顶级窗口的默认宽度(以像素为单位)。 |
SM_CXMAXTRACK 59 | 具有标题和大小调整边框的窗口的默认最大宽度(以像素为单位)。 此指标指的是整个桌面。 用户无法将窗口框架拖动到大于这些尺寸的尺寸。 窗口可以通过处理WM_GETMINMAXINFO消息来覆盖此值。 |
SM_CXMENUCHECK 71 | 默认菜单复选标记位图的宽度(以像素为单位)。 |
SM_CXMENUSIZE 54 | 菜单栏按钮的宽度,例如多文档界面中使用的子窗口关闭按钮,以像素为单位。 |
SM_CXMIN 28 | 窗口的最小宽度(以像素为单位)。 |
SM_CXMINIMIZED 57 | 最小化窗口的宽度(以像素为单位)。 |
SM_CXMINSPACING 47 | 最小化窗口的网格单元格的宽度(以像素为单位)。 每个最小化的窗口在排列时都适合这个尺寸的矩形。 该值始终大于或等于SM_CXMINIMIZED。 |
SM_CXMINTRACK 34 | 窗口的最小跟踪宽度(以像素为单位)。 用户无法将窗口框架拖动到小于这些尺寸的尺寸。 窗口可以通过处理WM_GETMINMAXINFO消息来覆盖此值。 |
SM_CXPADDEDBORDER 92 | 标题窗口的边框填充量(以像素为单位)。 Windows XP / 2000:不支持此值。 |
SM_CXSCREEN 0 | 主显示器屏幕的宽度,以像素为单位。 这是通过调用GetDeviceCaps获得的相同值,如下所示:GetDeviceCaps(hdcPrimaryMonitor,HORZRES)。 |
SM_CXSIZE 30 | 窗口标题或标题栏中按钮的宽度(以像素为单位)。 |
SM_CXSIZEFRAME 32 | 围绕窗口周边的大小调整边框的粗细,可以调整大小,以像素为单位。 SM_CXSIZEFRAME是水平边框的宽度,SM_CYSIZEFRAME是垂直边框的高度。 该值与SM_CXFRAME相同。 |
SM_CXSMICON 49 | 建议的小图标宽度(以像素为单位)。 小图标通常出现在窗口标题和小图标视图中。 |
SM_CXSMSIZE 52 | 小字幕按钮的宽度,以像素为单位。 |
SM_CXVIRTUALSCREEN 78 | 虚拟屏幕的宽度(以像素为单位)。 虚拟屏幕是所有显示器的边界矩形。 SM_XVIRTUALSCREEN度量标准是虚拟屏幕左侧的坐标。 |
SM_CXVSCROLL 2 | 垂直滚动条的宽度(以像素为单位)。 |
SM_CYBORDER 6 | 窗口边框的高度(以像素为单位)。 这相当于具有3-D外观的窗口的SM_CYEDGE值。 |
SM_CYCAPTION 4 | 标题区域的高度,以像素为单位。 |
SM_CYCURSOR 14 | 光标的高度,以像素为单位。 系统无法创建其他大小的游标。 |
SM_CYDLGFRAME 8 | 同 SM_CYFIXEDFRAME. |
SM_CYDOUBLECLK 37 | 双击序列中第一次单击位置周围的矩形高度,以像素为单位。 第二次单击必须在SM_CXDOUBLECLK和SM_CYDOUBLECLK定义的矩形内进行,系统才能考虑双击两次单击。 两次单击也必须在指定时间内发生。 要设置双击矩形的高度,请使用SPI_SETDOUBLECLKHEIGHT调用SystemParametersInfo。 |
SM_CYDRAG 69 | 在拖动操作开始之前鼠标指针可以移动的鼠标按下点上方和下方的像素数。 这允许用户轻松地单击和释放鼠标按钮而不会无意中开始拖动操作。 如果此值为负值,则从鼠标按下点上方减去它并在其下方添加。 |
SM_CYEDGE 46 | 三维边框的高度(以像素为单位)。 这是SM_CYBORDER的3D对应物。 |
SM_CYFIXEDFRAME 8 | 围绕窗口周边的框架的厚度,其具有标题但不是相当大的像素。 SM_CXFIXEDFRAME是水平边框的高度,SM_CYFIXEDFRAME是垂直边框的宽度。 该值与SM_CYDLGFRAME相同。 |
SM_CYFOCUSBORDER 84 | DrawFocusRect绘制的焦点矩形的顶部和底部边缘的高度。 该值以像素为单位。 Windows 2000:不支持此值。 |
SM_CYFRAME 33 | 同 SM_CYSIZEFRAME. |
SM_CYFULLSCREEN 17 | 主显示器监视器上全屏窗口的客户端区域高度(以像素为单位)。 要使屏幕部分的坐标不被系统任务栏或应用程序桌面工具栏遮挡,请使用SPI_GETWORKAREA值调用SystemParametersInfo函数。 |
SM_CYHSCROLL 3 | 水平滚动条的高度,以像素为单位。 |
SM_CYICON 12 | 图标的默认高度(以像素为单位)。 LoadIcon函数只能加载尺寸为SM_CXICON和SM_CYICON的图标。 |
SM_CYICONSPACING 39 | 大图标视图中项目的网格单元格的高度,以像素为单位。 安排时,每个项目都适合SM_CYICONSPACING的SM_CXICONSPACING大小的矩形。 该值始终大于或等于SM_CYICON。 |
SM_CYKANJIWINDOW 18 | 对于系统的双字节字符集版本,这是屏幕底部的汉字窗口的高度,以像素为单位。 |
SM_CYMAXIMIZED 62 | 主显示监视器上最大化顶级窗口的默认高度(以像素为单位)。 |
SM_CYMAXTRACK 60 | 具有标题和大小调整边框的窗口的默认最大高度(以像素为单位)。 此指标指的是整个桌面。 用户无法将窗口框架拖动到大于这些尺寸的尺寸。 窗口可以通过处理WM_GETMINMAXINFO消息来覆盖此值。 |
SM_CYMENU 15 | 单行菜单栏的高度(以像素为单位)。 |
SM_CYMENUCHECK 72 | 默认菜单复选标记位图的高度(以像素为单位)。 |
SM_CYMENUSIZE 55 | 菜单栏按钮的高度,例如多文档界面中使用的子窗口关闭按钮,以像素为单位。 |
SM_CYMIN 29 | 窗口的最小高度(以像素为单位)。 |
SM_CYMINIMIZED 58 | 最小化窗口的高度(以像素为单位)。 |
SM_CYMINSPACING 48 | 最小化窗口的网格单元格的高度,以像素为单位。 每个最小化的窗口在排列时都适合这个尺寸的矩形。 此值始终大于或等于SM_CYMINIMIZED。 |
SM_CYMINTRACK 35 | 窗口的最小跟踪高度(以像素为单位)。 用户无法将窗口框架拖动到小于这些尺寸的尺寸。 窗口可以通过处理WM_GETMINMAXINFO消息来覆盖此值。 |
SM_CYSCREEN 1 | 主显示器屏幕的高度,以像素为单位。 这是通过调用GetDeviceCaps获得的相同值,如下所示:GetDeviceCaps(hdcPrimaryMonitor,VERTRES)。 |
SM_CYSIZE 31 | 窗口标题或标题栏中按钮的高度(以像素为单位)。 |
SM_CYSIZEFRAME 33 | 围绕窗口周边的大小调整边框的粗细,可以调整大小,以像素为单位。 SM_CXSIZEFRAME是水平边框的宽度,SM_CYSIZEFRAME是垂直边框的高度。 该值与SM_CYFRAME相同。 |
SM_CYSMCAPTION 51 | 小标题的高度,以像素为单位。 |
SM_CYSMICON 50 | 建议的小图标高度(以像素为单位)。 小图标通常出现在窗口标题和小图标视图中。 |
SM_CYSMSIZE 53 | 小字幕按钮的高度,以像素为单位。 |
SM_CYVIRTUALSCREEN 79 | 虚拟屏幕的高度,以像素为单位。 虚拟屏幕是所有显示器的边界矩形。 SM_YVIRTUALSCREEN指标是虚拟屏幕顶部的坐标。 |
SM_CYVSCROLL 20 | 垂直滚动条上箭头位图的高度,以像素为单位。 |
SM_CYVTHUMB 9 | 垂直滚动条中拇指框的高度,以像素为单位。 |
SM_DBCSENABLED 42 | 如果User32.dll支持DBCS,则为非零; 否则,0。 |
SM_DEBUG 22 | 如果安装了User.exe的调试版本,则为非零; 否则,0。 |
SM_DIGITIZER 94 | 如果当前操作系统是Windows 7或Windows Server 2008 R2且Tablet PC输入服务已启动,则为非零; 返回值是一个位掩码,指定设备支持的数字化仪输入的类型。 有关更多信息,请参阅备注。 Windows Server 2008,Windows Vista和Windows XP / 2000:不支持此值。 |
SM_IMMENABLED 82 | 如果启用了输入法管理器/输入法编辑器功能,则为非零; 否则,0。 SM_IMMENABLED指示系统是否已准备好在Unicode应用程序上使用基于Unicode的IME。 要确保依赖于语言的IME正常工作,请检查SM_DBCSENABLED和系统ANSI代码页。 否则,可能无法正确执行ANSI到Unicode转换,或者可能不存在某些组件(如字体或注册表设置)。 |
SM_MAXIMUMTOUCHES 95 | 如果系统中有数字化仪,则为非零; 否则,0。 SM_MAXIMUMTOUCHES返回系统中每个数字化仪支持的最大联系数的最大值。 如果系统只有单触式数字化仪,则返回值为1.如果系统具有多点触摸数字化仪,则返回值是硬件可以提供的同时触点数。 Windows Server 2008,Windows Vista和Windows XP / 2000:不支持此值。 |
SM_MEDIACENTER 87 | 如果当前操作系统是Windows XP,Media Center Edition则为非零,否则为0。 |
SM_MENUDROPALIGNMENT 40 | 如果下拉菜单与相应的菜单栏项右对齐,则为非零; 如果菜单左对齐,则为0。 |
SM_MIDEASTENABLED 74 | 如果系统启用了希伯来语和阿拉伯语,则为非零,否则为0。 |
SM_MOUSEPRESENT 19 | 如果安装了鼠标,则为非零; 否则,0。该值很少为零,因为支持虚拟鼠标,并且因为某些系统检测到端口的存在而不是鼠标的存在。 |
SM_MOUSEHORIZONTALWHEELPRESENT 91 | 如果安装了带水平滚轮的鼠标,则为非零; 否则为0。 |
SM_MOUSEWHEELPRESENT 75 | 如果安装了带垂直滚轮的鼠标,则为非零; 否则为0。 |
SM_NETWORK 63 | 如果存在网络,则设置最低有效位; 否则,它被清除。 其他位保留供将来使用。 |
SM_PENWINDOWS 41 | 如果安装了Microsoft Windows for Pen计算扩展,则为非零; 否则为零。 |
SM_REMOTECONTROL 0x2001 | 此系统度量标准用于终端服务环境,以确定是否正在远程控制当前的终端服务器会话。 如果当前会话是远程控制的,它的值是非零的; 否则,0。 您可以使用终端服务管理工具(如终端服务管理器(tsadmin.msc)和shadow.exe)来控制远程会话。 当远程控制会话时,另一个用户可以查看该会话的内容并可能与其进行交互。 |
SM_REMOTESESSION 0x1000 | 此系统度量标准用于终端服务环境中。 如果调用进程与终端服务客户端会话关联,则返回值为非零。 如果调用进程与终端服务控制台会话关联,则返回值为0。 Windows Server 2003和Windows XP:控制台会话不一定是物理控制台。 有关更多信息,请参阅WTSGetActiveConsoleSessionId。 |
SM_SAMEDISPLAYFORMAT 81 | 如果所有显示器具有相同的颜色格式,则为非零,否则为0.两个显示器可以具有相同的位深度,但颜色格式不同。 例如,红色,绿色和蓝色像素可以用不同数量的比特编码,或者那些比特可以位于像素颜色值中的不同位置。 |
SM_SECURE 44 | 应忽略此系统指标; 它总是返回0。 |
SM_SERVERR2 89 | 如果系统是Windows Server 2003 R2,则为内部版本号; 否则,0。 |
SM_SHOWSOUNDS 70 | 非零,如果用户要求应用程序以可视方式呈现信息,否则它将仅以可听形式呈现信息; 否则,0。 |
SM_SHUTTINGDOWN 0x2000 | 如果当前会话正在关闭,则为非零; 否则,0。 Windows 2000:不支持此值。 |
SM_SLOWMACHINE 73 | 如果计算机具有低端(慢)处理器,则为非零; 否则,0。 |
SM_STARTER 88 | 如果当前操作系统是Windows 7 Starter Edition,Windows Vista Starter或Windows XP Starter Edition,则为非零; 否则,0。 |
SM_SWAPBUTTON 23 | 如果交换了鼠标左键和右键的含义,则为非零; 否则,0。 |
SM_SYSTEMDOCKED 0x2004 | 反映停靠模式的状态,0表示未锁定模式,否则为非零。 当此系统指标发生变化时,系统通过WM_SETTINGCHANGE通过LPARAM中的"SystemDockMode"发送广播消息。 |
SM_TABLETPC 86 | 如果当前操作系统是Windows XP Tablet PC版本,或者当前操作系统是Windows Vista或Windows 7且Tablet PC输入服务已启动,则为非零; SM_DIGITIZER设置指示运行Windows 7或Windows Server 2008 R2的设备支持的数字化仪输入类型。 有关更多信息,请参阅备注。 |
SM_XVIRTUALSCREEN 76 | 虚拟屏幕左侧的坐标。 虚拟屏幕是所有显示器的边界矩形。 SM_CXVIRTUALSCREEN指标是虚拟屏幕的宽度。 |
SM_YVIRTUALSCREEN 77 | 虚拟屏幕顶部的坐标。 虚拟屏幕是所有显示器的边界矩形。 SM_CYVIRTUALSCREEN指标是虚拟屏幕的高度。 |
返回值
类型:
输入:int
如果函数成功,则返回值是请求的系统度量标准或配置设置。
如果函数失败,则返回值为0. GetLastError不提供扩展错误信息。
备注
系统指标因显示而异。
GetSystemMetrics(SM_CMONITORS)仅计算可见的显示监视器。 这与EnumDisplayMonitors不同,EnumDisplayMonitors枚举可见显示监视器和与镜像驱动程序关联的不可见伪监视器。 不可见的伪监视器与用于镜像应用程序绘制以进行远程处理或其他目的的伪设备相关联。
SM_ARRANGE设置指定系统如何排列最小化窗口,并包含起始位置和方向。 起始位置可以是以下值之一。
值 | 解释 |
ARW_BOTTOMLEFT | 从屏幕的左下角开始。 默认位置。 |
ARW_BOTTOMRIGHT | 从屏幕的右下角开始。 相当于ARW_STARTRIGHT。 |
ARW_TOPLEFT | 从屏幕的左上角开始。 相当于ARW_STARTTOP。 |
ARW_TOPRIGHT | 从屏幕的右上角开始。 相当于ARW_STARTTOP |SRW_STARTRIGHT。 |
排列最小化窗口的方向可以是以下值之一。
值 | 解释 |
ARW_DOWN | 垂直排列,从上到下排列。 |
ARW_HIDE | 通过将最小化的窗口移出屏幕的可见区域来隐藏它们。 |
ARW_LEFT | 水平排列,从左到右。 |
ARW_RIGHT | 水平排列,从右到左排列。 |
ARW_UP | 垂直排列,从下到上排列。 |
SM_DIGITIZER设置指定运行Windows 7或Windows Server 2008 R2的设备上安装的数字化仪的类型。 返回值是一个位掩码,指定以下一个或多个值。
值 | 解释 |
NID_INTEGRATED_TOUCH 0x01 | 该设备具有集成的触摸数字化仪。 |
NID_EXTERNAL_TOUCH 0x02 | 该设备具有外部触摸数字化仪。 |
NID_INTEGRATED_PEN 0x04 | 该设备具有集成的笔数字化仪。 |
NID_EXTERNAL_PEN 0x08 | 该设备有一个外部笔数字化仪。 |
NID_MULTI_INPUT 0x40 | 该设备支持多个数字转换器输入源。 |
NID_READY 0x80 | 设备已准备好接收数字化仪输入。 |
此API不支持DPI,如果调用线程是每个监视器支持DPI,则不应使用此API。 有关此API的DPI感知版本,请参阅GetSystemMetricsForDPI。 有关DPI感知的详细信息,请参阅Windows High DPI文档。