博主自制工具 翰華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 |
指示系統的啓動方式:
故障安全啓動(也稱爲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文檔。