GetSystemMetrics 函式 (winuser.h)

擷取指定的系統計量或系統組態設定。

請注意, GetSystemMetrics 擷取的所有維度都是以像素為單位。

語法

int GetSystemMetrics(
  [in] int nIndex
);

參數

[in] nIndex

類型: int

要擷取的系統計量或組態設定。 此參數可以是下列其中一個值。 請注意,所有SM_CX* 值都是寬度,而所有SM_CY* 值都是高度。 另請注意,所有設計為傳回布爾數據的設定都會以任何非零值表示 TRUE ,而 FALSE 則表示為零值。

意義
SM_ARRANGE
56
指定系統排列最小化視窗方式的旗標。 如需詳細資訊,請參閱本主題中的一節。
SM_CLEANBOOT
67
指定系統啟動方式的 值:
  • 0 一般開機
  • 1 安全開機
  • 2 在網路開機時安全無虞
安全開機 (也稱為SafeBoot、SafeMode或 Clean Boot) 會略過用戶啟動檔案。
SM_CMONITORS
80
桌面上的顯示監視器數目。 如需詳細資訊,請參閱本主題中的一節。
SM_CMOUSEBUTTONS
43
滑鼠上的按鈕數目,如果沒有安裝滑鼠,則為零。
SM_CONVERTIBLESLATEMODE
0x2003
反映膝上型計算機或平板模式的狀態,如果是 Slate 模式則為 0,否則為非零。 當此系統計量變更時,系統會透過 LPARAM 中的 「ConvertibleSlateMode」 WM_SETTINGCHANGE傳送廣播訊息。 請注意,此系統計量不適用於桌面計算機。 在此情況下,請使用 GetAutoRotationState
SM_CXBORDER
5
視窗框線的寬度,以像素為單位。 這相當於具有 3D 外觀的視窗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的 3D 對應專案。
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
水平滾動條中 Thumb 方塊的寬度,以像素為單位。
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
視窗框線的高度,以像素為單位。 這相當於具有 3D 外觀的視窗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
3D 框線的高度,以像素為單位。 這是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,且已啟動平板電腦輸入服務,則為非零;否則為 0。 傳回值是位掩碼,指定裝置所支援數位板輸入的類型。 如需詳細資訊,請參閱<備註>。

Windows Server 2008、Windows Vista 和 Windows XP/2000: 不支援此值。

SM_IMMENABLED
82
如果已啟用 Input Method Manager/Input Method 編輯器 功能,則為非零;否則為 0。

SM_IMMENABLED指出系統是否準備好在 Unicode 應用程式上使用 Unicode 型輸入法。 若要確保語言相依的 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 簡易版 Edition、Windows Vista Starter 或 Windows XP Starter Edition,則為非零;否則為 0。
SM_SWAPBUTTON
23
如果交換左右滑鼠按鈕的意義,則為非零;否則為 0。
SM_SYSTEMDOCKED
0x2004
反映停駐模式的狀態,若為 [未模擬模式] 則為0,否則為非零。 當此系統計量變更時,系統會透過 LPARAM 中的 SystemDockMode」 WM_SETTINGCHANGE傳送廣播訊息。
SM_TABLETPC
86
如果目前的操作系統是 Windows XP 平板電腦版本,或目前的作業系統是 Windows Vista 或 Windows 7,且已啟動平板電腦輸入服務,則為非零;否則為 0。 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 不同,它會列舉與鏡像驅動程式相關聯的可見顯示監視器和不可見的虛擬監視器。 隱藏的虛擬監視器會與虛擬裝置相關聯,用來鏡像應用程式繪圖以供遠端或其他用途使用。

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 的 DPI 感知版本,請參閱 GetSystemMetricsForDPI。 如需 DPI 感知的詳細資訊,請參閱 Windows High DPI 檔。

範例

下列範例會使用 GetSystemMetrics 函式來判斷是否已安裝滑鼠,以及是否交換滑鼠按鈕。 此範例也會使用 SystemParametersInfo 函式來擷取滑鼠閾值和速度。 它會在控制台中顯示資訊。

#include <windows.h>
#include <stdio.h>
#pragma comment(lib, "user32.lib")

void main()
{
   BOOL fResult;
   int aMouseInfo[3];
 
   fResult = GetSystemMetrics(SM_MOUSEPRESENT); 
 
   if (fResult == 0) 
      printf("No mouse installed.\n"); 
   else 
   { 
      printf("Mouse installed.\n");

      // Determine whether the buttons are swapped. 

      fResult = GetSystemMetrics(SM_SWAPBUTTON); 
 
      if (fResult == 0) 
         printf("Buttons not swapped.\n"); 
      else printf("Buttons swapped.\n");
 
      // Get the mouse speed and the threshold values. 
 
      fResult = SystemParametersInfo(
         SPI_GETMOUSE,  // get mouse information 
         0,             // not used 
         &aMouseInfo,   // holds mouse information 
         0);            // not used 

      if( fResult )
      { 
         printf("Speed: %d\n", aMouseInfo[2]); 
         printf("Threshold (x,y): %d,%d\n", 
            aMouseInfo[0], aMouseInfo[1]); 
      }
   } 
}

規格需求

需求
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限桌面應用程式]
目標平台 Windows
標頭 winuser.h (包含 Windows.h)
程式庫 User32.lib
Dll User32.dll
API 集合 ext-ms-win-ntuser-sysparams-ext-l1-1-0 (於 Windows 8)

另請參閱

EnumDisplayMonitors

GetSystemMetricsForDPI

SystemParametersInfo