int GetSystemMetrics( [in] int nIndex );
參數
[in] nIndex
類型: int
要擷取的系統計量或組態設定。 此參數可以是下列其中一個值。 請注意,所有SM_CX* 值都是寬度,而所有SM_CY* 值都是高度。 另請注意,所有設計用來傳回布林值的設定都代表 TRUE 做為任何非零值, 而 FALSE 則表示為零值。
值 | 意義 |
---|---|
SM_ARRANGE 56 | 指定系統如何排列最小化視窗的旗標。 如需詳細資訊,請參閱本主題中的一節。 |
SM_CLEANBOOT 67 | 指定系統啟動方式的值:
|
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 | 水準捲軸中指紋方塊的寬度,以圖元為單位。 |
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 | 垂直捲動條中 Thumb 方塊的高度,以圖元為單位。 |
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 | 如果已啟用輸入法管理員/輸入法編輯器功能,則為非零;否則為 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 函式來擷取滑鼠閾值和速度。 它會在主控台中顯示資訊。
syntax複製
#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]);
}
}
}