GetSystemMetrics(int nIndex) - 獲取系統環境信息

博主自制工具   翰華Box:https://hanhuabox.lanzous.com/b00zjq9uf

翰華Box - 開發日誌:https://blog.csdn.net/qq_41517936/article/details/106409456

前言

    在寫屏幕截圖程序的時候,爲了適應多屏場景,需要一些屏幕的信息,於是查到了 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文檔。

原文鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章