GetSystemMetrics 函式 (winuser.h)
擷取指定的系統計量或系統組態設定。
請注意, GetSystemMetrics 擷取的所有維度都是以像素為單位。
語法
int GetSystemMetrics(
[in] int nIndex
);
參數
[in] nIndex
類型: int
要擷取的系統計量或組態設定。 此參數可以是下列其中一個值。 請注意,所有SM_CX* 值都是寬度,而所有SM_CY* 值都是高度。 另請注意,所有設計為傳回布爾數據的設定都會以任何非零值表示 TRUE ,而 FALSE 則表示為零值。
值 | 意義 |
---|---|
|
指定系統排列最小化視窗方式的旗標。 如需詳細資訊,請參閱本主題中的一節。 |
|
指定系統啟動方式的 值:
|
|
桌面上的顯示監視器數目。 如需詳細資訊,請參閱本主題中的一節。 |
|
滑鼠上的按鈕數目,如果沒有安裝滑鼠,則為零。 |
|
反映膝上型計算機或平板模式的狀態,如果是 Slate 模式則為 0,否則為非零。 當此系統計量變更時,系統會透過 LPARAM 中的 「ConvertibleSlateMode」 WM_SETTINGCHANGE傳送廣播訊息。 請注意,此系統計量不適用於桌面計算機。 在此情況下,請使用 GetAutoRotationState。 |
|
視窗框線的寬度,以像素為單位。 這相當於具有 3D 外觀的視窗SM_CXEDGE值。 |
|
游標的標號寬度,以像素為單位。 |
|
這個值與SM_CXFIXEDFRAME相同。 |
|
在按兩下序列中,以像素為單位之第一次按下的位置周圍矩形的寬度。 第二次按兩次按兩下必須發生在由SM_CXDOUBLECLK定義的矩形內,而且系統SM_CYDOUBLECLK,才能考慮按兩次。 兩次點選也必須在指定的時間內發生。
若要設定按兩下矩形的寬度,請使用 SPI_SETDOUBLECLKWIDTH呼叫 SystemParametersInfo 。 |
|
滑鼠指標可以在拖曳作業開始之前移動的滑鼠向下點任一側的像素數。 這可讓使用者輕鬆按下並放開滑鼠按鈕,而不小心啟動拖曳作業。 如果此值為負數,則會從滑鼠向下點的左邊減去,並將其新增至其右側。 |
|
立體框線的寬度,以像素為單位。 此計量是SM_CXBORDER的 3D 對應專案。 |
|
窗口周邊周圍有 標題 但無法重設大小的框架粗細,以像素為單位。
SM_CXFIXEDFRAME是水準框線的高度,SM_CYFIXEDFRAME是垂直框線的寬度。
這個值與SM_CXDLGFRAME相同。 |
|
DrawFocusRect 繪製之焦點矩形左邊緣和右邊緣的寬度。 此值以像素為單位。
Windows 2000: 不支援這個值。 |
|
這個值與SM_CXSIZEFRAME相同。 |
|
主要顯示監視器上全螢幕視窗的工作區寬度,以像素為單位。 若要取得系統任務列或應用程式桌面工具列未遮蔽之畫面部分的座標,請使用 SPI_GETWORKAREA 值呼叫 SystemParametersInfo 函式。 |
|
水平滾動條上箭號位圖的寬度,以像素為單位。 |
|
水平滾動條中 Thumb 方塊的寬度,以像素為單位。 |
|
圖示的系統大寬度,以像素為單位。 LoadIcon 函式只能載入具有SM_CXICON和SM_CYICON指定維度的圖示。 如需詳細資訊,請參閱 圖示大小 。 |
|
大型圖示檢視中專案網格線儲存格的寬度,以像素為單位。 每個專案在排列時會依SM_CYICONSPACING放入大小SM_CXICONSPACING矩形。 這個值一律大於或等於SM_CXICON。 |
|
主要顯示監視器上最大化最上層視窗的默認寬度,以像素為單位。 |
|
具有 標題 和重設大小框線之視窗的預設寬度上限,以像素為單位。 此計量是指整個桌面。 用戶無法將視窗框架拖曳到大於這些維度的大小。 視窗可以藉由處理 WM_GETMINMAXINFO 訊息來覆寫此值。 |
|
默認功能表複選標記點陣圖的寬度,以像素為單位。 |
|
功能表欄按鈕的寬度,例如在多個檔介面中使用的子視窗關閉按鈕,以像素為單位。 |
|
視窗的最小寬度,以像素為單位。 |
|
最小化視窗的寬度,以像素為單位。 |
|
最小化視窗的網格線儲存格寬度,以像素為單位。 每個最小化視窗在排列時會放入這個大小的矩形。 這個值一律大於或等於SM_CXMINIMIZED。 |
|
視窗的最小追蹤寬度,以像素為單位。 用戶無法將視窗框架拖曳到小於這些維度的大小。 視窗可以藉由處理 WM_GETMINMAXINFO 訊息來覆寫此值。 |
|
標題視窗的框線邊框間距,以像素為單位。
Windows XP/2000: 不支援此值。 |
|
主要顯示監視器的螢幕寬度,以像素為單位。 呼叫 GetDeviceCaps 來取得這個值,如下所示: GetDeviceCaps(
hdcPrimaryMonitor, HORZRES) 。
|
|
視窗內按鈕的寬度 標題 或標題欄,以像素為單位。 |
|
窗口周邊周圍重設大小框線的粗細,可重設大小,以像素為單位。
SM_CXSIZEFRAME是水準框線的寬度,而SM_CYSIZEFRAME是垂直框線的高度。
這個值與SM_CXFRAME相同。 |
|
圖示的系統寬度小,以像素為單位。 小型圖示通常會出現在視窗標題和小型圖示檢視中。 如需詳細資訊,請參閱 圖示大小 。 |
|
小 標題 按鈕的寬度,以像素為單位。 |
|
虛擬畫面的寬度,以像素為單位。 虛擬畫面是所有顯示監視器的周框。 SM_XVIRTUALSCREEN計量是虛擬畫面左側的座標。 |
|
垂直滾動條的寬度,以像素為單位。 |
|
視窗框線的高度,以像素為單位。 這相當於具有 3D 外觀的視窗SM_CYEDGE值。 |
|
標題 區域的高度,以像素為單位。 |
|
游標的標稱高度,以像素為單位。 |
|
這個值與SM_CYFIXEDFRAME相同。 |
|
在按兩下序列中,以像素為單位的第一次按下位置周圍矩形的高度。 第二次按兩下必須發生在SM_CXDOUBLECLK定義的矩形內,而且SM_CYDOUBLECLK,系統才能考慮按兩次。 這兩次按下也必須在指定的時間內發生。
若要設定按兩下矩形的高度,請使用 SPI_SETDOUBLECLKHEIGHT呼叫 SystemParametersInfo 。 |
|
滑鼠指標可以在拖曳作業開始之前移動的滑鼠向下點上方和下方的像素數目。 這可讓使用者輕鬆按下並放開滑鼠按鈕,而不小心啟動拖曳作業。 如果此值為負值,則會從滑鼠向下點上方減去,並將它新增至下方。 |
|
3D 框線的高度,以像素為單位。 這是SM_CYBORDER的 3D 對應專案。 |
|
窗口周邊周圍有 標題 但不可重設大小的框架粗細,以像素為單位。
SM_CXFIXEDFRAME是水準框線的高度,而SM_CYFIXEDFRAME是垂直框線的寬度。
這個值與SM_CYDLGFRAME相同。 |
|
DrawFocusRect 繪製之焦點矩形上邊緣和下邊緣的高度。 此值以像素為單位。
Windows 2000: 不支援此值。 |
|
這個值與SM_CYSIZEFRAME相同。 |
|
主要顯示器監視器上全螢幕視窗的工作區高度,以像素為單位。 若要取得系統任務列或應用程式桌面工具列未遮蔽螢幕部分的座標,請使用 SPI_GETWORKAREA 值呼叫 SystemParametersInfo 函式。 |
|
水平滾動條的高度,以像素為單位。 |
|
圖示的系統大高度,以像素為單位。 LoadIcon 函式只能載入具有SM_CXICON和SM_CYICON指定之維度的圖示。 如需詳細資訊,請參閱 圖示大小 。 |
|
大型圖示檢視中專案網格線單元格的高度,以像素為單位。 每個專案都符合排列時SM_CYICONSPACING的大小矩形SM_CXICONSPACING。 這個值一律大於或等於SM_CYICON。 |
|
針對系統的雙位元組字元集版本,這是畫面底部的漢字視窗高度,以像素為單位。 |
|
主要顯示器監視器上最大化最上層窗口的預設高度,以像素為單位。 |
|
具有 標題 和重設大小框線之窗口的預設高度上限,以像素為單位。 此計量是指整個桌面。 用戶無法將視窗框架拖曳到大於這些維度的大小。 視窗可以藉由處理 WM_GETMINMAXINFO 訊息來覆寫此值。 |
|
單行功能表欄的高度,以像素為單位。 |
|
默認功能表複選標記點陣圖的高度,以像素為單位。 |
|
功能表欄按鈕的高度,例如在多個檔介面中使用的子視窗關閉按鈕,以像素為單位。 |
|
視窗的最小高度,以像素為單位。 |
|
最小化視窗的高度,以像素為單位。 |
|
最小化視窗的網格線單元格高度,以像素為單位。 每個最小化視窗在排列時會放入這個大小的矩形。 這個值一律大於或等於SM_CYMINIMIZED。 |
|
視窗的最小追蹤高度,以像素為單位。 用戶無法將視窗框架拖曳到小於這些維度的大小。 視窗可以藉由處理 WM_GETMINMAXINFO 訊息來覆寫此值。 |
|
主要顯示監視器的螢幕高度,以像素為單位。 呼叫 GetDeviceCaps 來取得這個值,如下所示: GetDeviceCaps(
hdcPrimaryMonitor, VERTRES) 。
|
|
視窗內按鈕的高度 標題 或標題欄,以像素為單位。 |
|
窗口周邊周圍重設大小框線的粗細,可重設大小,以像素為單位。
SM_CXSIZEFRAME是水準框線的寬度,而SM_CYSIZEFRAME是垂直框線的高度。
這個值與SM_CYFRAME相同。 |
|
小型 標題 的高度,以像素為單位。 |
|
圖示的系統小高度,以像素為單位。 小型圖示通常會出現在視窗標題和小型圖示檢視中。 如需詳細資訊,請參閱 圖示大小 。 |
|
小 標題 按鈕的高度,以像素為單位。 |
|
虛擬螢幕的高度,以像素為單位。 虛擬畫面是所有顯示監視器的周框。 SM_YVIRTUALSCREEN計量是虛擬畫面頂端的座標。 |
|
垂直滾動條上箭號位圖的高度,以像素為單位。 |
|
垂直滾動條中指紋方塊的高度,以像素為單位。 |
|
如果 User32.dll 支援 DBCS,則為非零;否則為 0。 |
|
如果已安裝偵錯版本的 User.exe,則為非零;否則為 0。 |
|
如果目前的操作系統是 Windows 7 或 Windows Server 2008 R2,且已啟動平板電腦輸入服務,則為非零;否則為 0。 傳回值是位掩碼,指定裝置所支援數位板輸入的類型。 如需詳細資訊,請參閱<備註>。
Windows Server 2008、Windows Vista 和 Windows XP/2000: 不支援此值。 |
|
如果已啟用 Input Method Manager/Input Method 編輯器 功能,則為非零;否則為 0。
SM_IMMENABLED指出系統是否準備好在 Unicode 應用程式上使用 Unicode 型輸入法。 若要確保語言相依的 IME 能夠運作,請檢查SM_DBCSENABLED和系統 ANSI 代碼頁。 否則,可能無法正確執行 ANSI 到 Unicode 轉換,或可能不存在某些元件,例如字型或登錄設定。 |
|
如果系統中有數位板,則為非零;否則為 0。
SM_MAXIMUMTOUCHES會傳回系統中每個數位板所支持聯繫人數目上限的匯總上限。 如果系統只有單一觸控數位板,則傳回值為 1。 如果系統具有多點觸控數位板,傳回值就是硬體可以提供的同時聯繫人數目。 Windows Server 2008、Windows Vista 和 Windows XP/2000: 不支援此值。 |
|
如果目前的操作系統是 Windows XP、Media Center Edition,則為非零,否則為 0。 |
|
如果下拉功能表靠右對齊對應的功能表欄專案,則為非零;如果功能表靠左對齊,則為0。 |
|
如果已針對希伯來文和阿拉伯文啟用系統,則為非零,否則為0。 |
|
如果已安裝滑鼠,則為非零;否則為 0。 此值很少為零,因為支援虛擬滑鼠,而且某些系統偵測到埠是否存在,而不是滑鼠存在。 |
|
如果已安裝水準滾動輪的滑鼠,則為非零;否則為 0。 |
|
如果已安裝具有垂直滾動輪的滑鼠,則為非零;否則為 0。 |
|
如果網路存在,則會設定最小有效位;否則會清除它。 其他位會保留供日後使用。 |
|
如果已安裝 Microsoft Windows for Pen 運算延伸模組,則為非零;否則為零。 |
|
此系統計量用於終端機服務環境中,以判斷目前的終端機伺服器會話是否正在遠端控制。 如果目前會話是遠端控制的,則其值為非零值;否則為 0。
您可以使用終端機服務管理工具,例如終端機服務管理員 (tsadmin.msc) 和 shadow.exe 來控制遠端會話。 在遠端控制會話時,另一位使用者可以檢視該會話的內容,並可能與其互動。 |
|
此系統計量用於終端機服務環境中。 如果呼叫進程與終端機服務用戶端會話相關聯,則傳回值為非零。 如果呼叫進程與終端機服務控制台會話相關聯,則傳回值為 0。 Windows Server 2003 和 Windows XP: 主控台會話不一定是實體控制台。 如需詳細資訊,請參閱 WTSGetActiveConsoleSessionId。 |
|
如果所有顯示器監視器都有相同的色彩格式,則為非零,否則為 0。 兩個顯示器可以有相同的位深度,但色彩格式不同。 例如,紅色、綠色和藍色圖元可以使用不同的位數編碼,或者這些位可以位於圖元色彩值的不同位置。 |
|
應忽略此系統計量;它一律會傳回 0。 |
|
如果系統是 Windows Server 2003 R2,則為組建編號;否則為 0。 |
|
如果使用者要求應用程式以視覺方式呈現資訊,則為非零,否則只會以可聽見的形式呈現資訊;否則為 0。 |
|
如果目前的工作階段正在關閉,則為非零;否則為 0。
Windows 2000: 不支援此值。 |
|
如果計算機具有低階 (速度緩慢) 處理器,則為非零;否則為 0。 |
|
如果目前的操作系統是 Windows 7 簡易版 Edition、Windows Vista Starter 或 Windows XP Starter Edition,則為非零;否則為 0。 |
|
如果交換左右滑鼠按鈕的意義,則為非零;否則為 0。 |
|
反映停駐模式的狀態,若為 [未模擬模式] 則為0,否則為非零。 當此系統計量變更時,系統會透過 LPARAM 中的 「 SystemDockMode」 WM_SETTINGCHANGE傳送廣播訊息。 |
|
如果目前的操作系統是 Windows XP 平板電腦版本,或目前的作業系統是 Windows Vista 或 Windows 7,且已啟動平板電腦輸入服務,則為非零;否則為 0。 SM_DIGITIZER設定指出執行 Windows 7 或 Windows Server 2008 R2 的裝置所支援的數位板輸入類型。 如需詳細資訊,請參閱<備註>。 |
|
虛擬畫面左側的座標。 虛擬畫面是所有顯示監視器的周框。 SM_CXVIRTUALSCREEN計量是虛擬畫面的寬度。 |
|
虛擬畫面頂端的座標。 虛擬畫面是所有顯示監視器的周框。 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) |