摘要:GetSystemMetrics函數(shù)是Windows API(Application Program Interface)函數(shù)中的一員。利用這一函數(shù),可以獲取很多關(guān)于系統(tǒng)的信息,包括軟件系統(tǒng)和硬件系統(tǒng)等,對(duì)于面向計(jì)算機(jī)軟、硬件系統(tǒng)檢測(cè)、維護(hù)的應(yīng)用程序開發(fā)有重要的應(yīng)用價(jià)值。本文討論了Delphi下GetSystemMetrics函數(shù)的典型應(yīng)用,并提供對(duì)應(yīng)的程序驗(yàn)證。
關(guān)鍵詞:Delphi;GetSystemMetrics;系統(tǒng)信息
中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)08-10ppp-0c
1 引言
GetSystemMetrics函數(shù)是API函數(shù)中的一員。利用這一函數(shù),通過傳遞參數(shù)來設(shè)置GetSystemMetrics函數(shù)所要獲取的信息,進(jìn)而獲取關(guān)于計(jì)算機(jī)的信息,包括軟件系統(tǒng)和硬件系統(tǒng)等,對(duì)于面向計(jì)算機(jī)軟、硬件系統(tǒng)檢測(cè)、維護(hù)的應(yīng)用程序開發(fā)有重要的應(yīng)用價(jià)值。
2 函數(shù)解析
GetSystemMetrics中有如下幾個(gè)重要的參數(shù),分別為:SM_CLEANBOOT、SM_CMOUSEBUTTONS、SM_MOUSEPRESENT、SM_NETWORK和SM_CYSCREEN。這五個(gè)參數(shù)分別應(yīng)用于操作系統(tǒng)的啟動(dòng)管理、鼠標(biāo)按鍵控制、網(wǎng)絡(luò)連接服務(wù)和顯示器管理等。
2.1 GetSystemMetrics(SM_CLEANBOOT)
利用GetSystemMetrics(SM_CLEANBOOT),可以獲得操作系統(tǒng)的啟動(dòng)模式。具體地:
返回值:0-操作系統(tǒng)是正常啟動(dòng)模式;
返回值:1-操作系統(tǒng)是安全模式啟動(dòng);
返回值:2-操作系統(tǒng)是網(wǎng)絡(luò)連接的安全模式啟動(dòng)。
2.2 GetSystemMetrics(SM_CMOUSEBUTTONS)
利用GetSystemMetrics(SM_CMOUSEBUTTONS)可以獲取計(jì)算機(jī)鼠標(biāo)按鍵的數(shù)量。如果它的返回值是0,則說明計(jì)算機(jī)沒有連接鼠標(biāo)。
2.3 GetSystemMetrics(SM_MOUSEPRESENT)
利用GetSystemMetrics(SM_MOUSEPRESENT)可以獲取計(jì)算機(jī)是否與鼠標(biāo)連接正常的信息。它的返回值是布爾值,具體如下:
返回值:True-計(jì)算機(jī)與鼠標(biāo)連接正常;
返回值:False-計(jì)算機(jī)與鼠標(biāo)連接異?;蛘呶磁c鼠標(biāo)連接。
2.4 GetSystemMetrics(SM_NETWORK)
利用GetSystemMetrics(SM_NETWORK)可以獲得計(jì)算機(jī)與網(wǎng)絡(luò)連接的狀態(tài)。它的返回值也是一個(gè)布爾值,具體如下:
返回值:True-計(jì)算機(jī)與網(wǎng)絡(luò)連接正常;
返回值:False-計(jì)算機(jī)與網(wǎng)絡(luò)連接異常或者未與網(wǎng)絡(luò)連接。
2.5 GetSystemMetrics(SM_CYSCREEN)
利用GetSystemMetrics(SM_CXSCREEN/SM_YSCREEN)可以獲得計(jì)算機(jī)顯示器的分辨率。該函數(shù)的返回值是Longint型。其中:SM_CXSCREEN是顯示器的水平分辨率;SM_CYSCREEN是顯示器的垂直分辨率。
3 應(yīng)用舉例
3.1 應(yīng)用舉例一
利用GetSystemMetrics(SM_CLEANBOOT)獲取操作系統(tǒng)啟動(dòng)狀態(tài)。在設(shè)計(jì)環(huán)境的主窗體上添加如下控件:4個(gè)CheckBox控件和1個(gè)Button控件。4個(gè)CheckBox控件的Caption屬性分別設(shè)為:“正常模式”、“安全模式”、“安全模式,并且具備網(wǎng)絡(luò)功能”、“系統(tǒng)啟動(dòng)有問題”。Button控件的Caption屬性設(shè)為“檢測(cè)”;在Button控件中編寫如下代碼:
case(GetSystemMetrics(SM_CLEANBOOT)) of
0:CheckBox1.Checked:=True; //正常模式
1:CheckBox2.Checked:=True; //安全模式
2:CheckBox3.Checked:=True; //安全模式且具備網(wǎng)絡(luò)功能
else
CheckBox4.Checked:=True; //系統(tǒng)啟動(dòng)有問題
end;
程序運(yùn)行效果如圖1所示。
圖1 應(yīng)用SM_CLEANBOOT參數(shù)的程序運(yùn)行效果
3.2 應(yīng)用舉例二
利用GetSystemMetrics(SM_NETWORK)測(cè)試網(wǎng)絡(luò)連接狀態(tài)。在設(shè)計(jì)環(huán)境的主窗體上添加如下控件:2個(gè)CheckBox控件和1個(gè)Button控件。2個(gè)CheckBox控件的Caption屬性分別設(shè)為:“網(wǎng)絡(luò)連接正?!?、“網(wǎng)絡(luò)連接異?!薄utton控件的Caption屬性設(shè)為“檢測(cè)”;在Button控件中編寫如下代碼:
if GetSystemMetrics(SM_NETWORK) AND $01 = $01
thenCheckBox5.Checked:=True //網(wǎng)絡(luò)連接正常
elseCheckBox6.Checked:=True; //網(wǎng)絡(luò)連接異常
程序運(yùn)行效果如圖2所示。
圖2 應(yīng)用SM_NETWORK參數(shù)的程序運(yùn)行效果
3.3 應(yīng)用舉例三
利用GetSystemMetrics(SM_CXSCREEN)/(SM_CYSCREEN)獲取顯示器分辨率信息。在設(shè)計(jì)環(huán)境的主窗體上添加如下控件:2個(gè)Label控件和1個(gè)Button控件;Button控件的Caption屬性設(shè)為“檢測(cè)”;在Button控件中編寫如下代碼:
var
x,y:longint; //存儲(chǔ)顯示器水平、垂直分辨率值
a:string;
begin
x := GetSystemMetrics(SM_CXSCREEN);
Str(x,a);
Label1.Caption := '顯示器水平分辨率:' + a;
y := GetSystemMetrics(SM_CYSCREEN);
Str(y,a);
Label2.Caption := '顯示器垂直分辨率:' + a;
end;
程序運(yùn)行效果如圖3所示。
圖3 應(yīng)用SM_CXSCREEN參數(shù)的程序運(yùn)行效果
3.4 應(yīng)用舉例四
利用GetSystemMetrics(SM_CMOUSEBUTTONS)檢測(cè)鼠標(biāo)類型。啟動(dòng)Delphi,新建一個(gè)工程;在主窗體上添加如下控件:1個(gè)Label控件和1個(gè)Button控件;Button控件的Caption屬性設(shè)為“檢測(cè)”;在Button控件中編寫如下代碼:
case(GetSystemMetrics(SM_CMOUSEBUTTONS)) of
0: Label3.Caption:='鼠標(biāo)異常'; //鼠標(biāo)異常時(shí)
1: Label3.Caption:='鼠標(biāo)有1個(gè)按鍵'; //單鍵鼠標(biāo)
2: Label3.Caption:='鼠標(biāo)有2個(gè)按鍵'; //雙鍵鼠標(biāo)
3: Label3.Caption:='鼠標(biāo)有3個(gè)按鍵'//三鍵鼠標(biāo)
end;
程序運(yùn)行效果如圖4所示。
圖4 應(yīng)用SM_CMOUSEBUTTONS參數(shù)的程序運(yùn)行效果
4 總結(jié)
GetSystemMetrics函數(shù)除上面所介紹的之外還有很多其它重要應(yīng)用,比如:利用GetSystemMetrics(SM_CXFRAME)/(SM_CYFRAME)獲取窗體框架的寬度和高度;利用GetSystemMetrics(SM_CYCAPTION)獲取窗體的標(biāo)題信息;利用GetSystemMetrics(SM_DBCSENABLED)判斷操作系統(tǒng)的語言等。該函數(shù)對(duì)用戶獲取、了解計(jì)算機(jī)軟件、硬件信息有著十分重要的作用。
參考文獻(xiàn):
[1]John Ayres.The Tomes of Delphi (tm) Win32 Core API Windows 2000 Edition[M].Wordware Publishing,2001.
[2]譚燕,趙磊,李之明.Delphi高級(jí)輔助工具精解[M].中國(guó)鐵道出版社,2003.