win32 API中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、安全模式或清除開機) 會略過使用者啟動檔案。

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]); 
      }
   } 
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值