摘要:GetSystemMetrics函數(shù)是Windows API(Application Program Interface)函數(shù)中的一員。利用這一函數(shù),可以獲取很多關于系統(tǒng)的信息,包括軟件系統(tǒng)和硬件系統(tǒng)等,對于面向計算機軟、硬件系統(tǒng)檢測、維護的應用程序開發(fā)有重要的應用價值。本文討論了Delphi下GetSystemMetrics函數(shù)的典型應用,并提供對應的程序驗證。
關鍵詞:Delphi;GetSystemMetrics;系統(tǒng)信息
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)08-10ppp-0c
1 引言
GetSystemMetrics函數(shù)是API函數(shù)中的一員。利用這一函數(shù),通過傳遞參數(shù)來設置GetSystemMetrics函數(shù)所要獲取的信息,進而獲取關于計算機的信息,包括軟件系統(tǒng)和硬件系統(tǒng)等,對于面向計算機軟、硬件系統(tǒng)檢測、維護的應用程序開發(fā)有重要的應用價值。
2 函數(shù)解析
GetSystemMetrics中有如下幾個重要的參數(shù),分別為:SM_CLEANBOOT、SM_CMOUSEBUTTONS、SM_MOUSEPRESENT、SM_NETWORK和SM_CYSCREEN。這五個參數(shù)分別應用于操作系統(tǒng)的啟動管理、鼠標按鍵控制、網(wǎng)絡連接服務和顯示器管理等。
2.1 GetSystemMetrics(SM_CLEANBOOT)
利用GetSystemMetrics(SM_CLEANBOOT),可以獲得操作系統(tǒng)的啟動模式。具體地:
返回值:0-操作系統(tǒng)是正常啟動模式;
返回值:1-操作系統(tǒng)是安全模式啟動;
返回值:2-操作系統(tǒng)是網(wǎng)絡連接的安全模式啟動。
2.2 GetSystemMetrics(SM_CMOUSEBUTTONS)
利用GetSystemMetrics(SM_CMOUSEBUTTONS)可以獲取計算機鼠標按鍵的數(shù)量。如果它的返回值是0,則說明計算機沒有連接鼠標。
2.3 GetSystemMetrics(SM_MOUSEPRESENT)
利用GetSystemMetrics(SM_MOUSEPRESENT)可以獲取計算機是否與鼠標連接正常的信息。它的返回值是布爾值,具體如下:
返回值:True-計算機與鼠標連接正常;
返回值:False-計算機與鼠標連接異常或者未與鼠標連接。
2.4 GetSystemMetrics(SM_NETWORK)
利用GetSystemMetrics(SM_NETWORK)可以獲得計算機與網(wǎng)絡連接的狀態(tài)。它的返回值也是一個布爾值,具體如下:
返回值:True-計算機與網(wǎng)絡連接正常;
返回值:False-計算機與網(wǎng)絡連接異常或者未與網(wǎng)絡連接。
2.5 GetSystemMetrics(SM_CYSCREEN)
利用GetSystemMetrics(SM_CXSCREEN/SM_YSCREEN)可以獲得計算機顯示器的分辨率。該函數(shù)的返回值是Longint型。其中:SM_CXSCREEN是顯示器的水平分辨率;SM_CYSCREEN是顯示器的垂直分辨率。
3 應用舉例
3.1 應用舉例一
利用GetSystemMetrics(SM_CLEANBOOT)獲取操作系統(tǒng)啟動狀態(tài)。在設計環(huán)境的主窗體上添加如下控件:4個CheckBox控件和1個Button控件。4個CheckBox控件的Caption屬性分別設為:“正常模式”、“安全模式”、“安全模式,并且具備網(wǎng)絡功能”、“系統(tǒng)啟動有問題”。Button控件的Caption屬性設為“檢測”;在Button控件中編寫如下代碼:
case(GetSystemMetrics(SM_CLEANBOOT)) of
0:CheckBox1.Checked:=True; //正常模式
1:CheckBox2.Checked:=True; //安全模式
2:CheckBox3.Checked:=True; //安全模式且具備網(wǎng)絡功能
else
CheckBox4.Checked:=True; //系統(tǒng)啟動有問題
end;
程序運行效果如圖1所示。

圖1 應用SM_CLEANBOOT參數(shù)的程序運行效果
3.2 應用舉例二
利用GetSystemMetrics(SM_NETWORK)測試網(wǎng)絡連接狀態(tài)。在設計環(huán)境的主窗體上添加如下控件:2個CheckBox控件和1個Button控件。2個CheckBox控件的Caption屬性分別設為:“網(wǎng)絡連接正常”、“網(wǎng)絡連接異常”。Button控件的Caption屬性設為“檢測”;在Button控件中編寫如下代碼:
if GetSystemMetrics(SM_NETWORK) AND $01 = $01
thenCheckBox5.Checked:=True //網(wǎng)絡連接正常
elseCheckBox6.Checked:=True; //網(wǎng)絡連接異常
程序運行效果如圖2所示。

圖2 應用SM_NETWORK參數(shù)的程序運行效果
3.3 應用舉例三
利用GetSystemMetrics(SM_CXSCREEN)/(SM_CYSCREEN)獲取顯示器分辨率信息。在設計環(huán)境的主窗體上添加如下控件:2個Label控件和1個Button控件;Button控件的Caption屬性設為“檢測”;在Button控件中編寫如下代碼:
var
x,y:longint; //存儲顯示器水平、垂直分辨率值
a:string;
begin
x := GetSystemMetrics(SM_CXSCREEN);
Str(x,a);
Label1.Caption := '顯示器水平分辨率:' + a;
y := GetSystemMetrics(SM_CYSCREEN);
Str(y,a);
Label2.Caption := '顯示器垂直分辨率:' + a;
end;
程序運行效果如圖3所示。

圖3 應用SM_CXSCREEN參數(shù)的程序運行效果
3.4 應用舉例四
利用GetSystemMetrics(SM_CMOUSEBUTTONS)檢測鼠標類型。啟動Delphi,新建一個工程;在主窗體上添加如下控件:1個Label控件和1個Button控件;Button控件的Caption屬性設為“檢測”;在Button控件中編寫如下代碼:
case(GetSystemMetrics(SM_CMOUSEBUTTONS)) of
0: Label3.Caption:='鼠標異常'; //鼠標異常時
1: Label3.Caption:='鼠標有1個按鍵'; //單鍵鼠標
2: Label3.Caption:='鼠標有2個按鍵'; //雙鍵鼠標
3: Label3.Caption:='鼠標有3個按鍵'//三鍵鼠標
end;
程序運行效果如圖4所示。

圖4 應用SM_CMOUSEBUTTONS參數(shù)的程序運行效果
4 總結
GetSystemMetrics函數(shù)除上面所介紹的之外還有很多其它重要應用,比如:利用GetSystemMetrics(SM_CXFRAME)/(SM_CYFRAME)獲取窗體框架的寬度和高度;利用GetSystemMetrics(SM_CYCAPTION)獲取窗體的標題信息;利用GetSystemMetrics(SM_DBCSENABLED)判斷操作系統(tǒng)的語言等。該函數(shù)對用戶獲取、了解計算機軟件、硬件信息有著十分重要的作用。
參考文獻:
[1]John Ayres.The Tomes of Delphi (tm) Win32 Core API Windows 2000 Edition[M].Wordware Publishing,2001.
[2]譚燕,趙磊,李之明.Delphi高級輔助工具精解[M].中國鐵道出版社,2003.