GetSystemMetrics 以及其参数

Posted hisdar

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

指示系统的启动方式:

  • 0 Normal boot
  • 1 Fail-safe boot
  • 2 Fail-safe with network boot

故障安全启动(也称为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文档。

以上是关于GetSystemMetrics 以及其参数的主要内容,如果未能解决你的问题,请参考以下文章

GetSystemMetrics()函数的用法

GetSystemMetrics()函数的用法

GetSystemMetrics()函数的用法 转

《Windows程序设计》读书笔七 鼠标

如何加快 BitBlt 以使用 aero 捕获屏幕?

GetSystemMetrics