Windows 95/98的啟動(dòng)模式可以分為正常模式和安全模式,在安全模式下,有很多功能被限制使用,比如多媒體功能、網(wǎng)絡(luò)功能等。有時(shí),我們編寫的程序正好需要這些被限制的功能,因此我們希望當(dāng)程序運(yùn)行時(shí)能自動(dòng)檢測當(dāng)前Windows所處的啟動(dòng)模式是不是安全模式,以確定是否繼續(xù)運(yùn)行程序。
那么如何在C++ Builder程序中檢測當(dāng)前的Windows是以正常模式還是安全模式啟動(dòng)的?這需要使用到API函數(shù)GetSystemMetrics來進(jìn)行檢測。API函數(shù)GetSystemMetrics可以取得Windows的一些配置信息,比如,鼠標(biāo)的按鍵數(shù)、窗體的邊界寬度,它也可以測得當(dāng)前Windows所處的啟動(dòng)模式。
在Windows API中,該函數(shù)的定義如下:
int GetSystemMetrics( int nIndex );
其中參數(shù)nIndex的取值很多,如果只想檢測Windows的啟動(dòng)模式,只要取參數(shù)值為SM_CLEANBOOT即可,該值將確認(rèn)當(dāng)前的Windows是以何種模式啟動(dòng)的。它的返回值有三個(gè):
0:正常啟動(dòng)模式;
1:安全模式啟動(dòng)Windows;
2:以安全模式啟動(dòng),但是擁有網(wǎng)絡(luò)功能。
我們可以在程序的起始部分使用該函數(shù),如下面的示例中,我們根據(jù)Windows啟動(dòng)模式的不同,應(yīng)用程序顯示出不同的提示信息,用戶可以在實(shí)際編程中具體添加新的處理代碼。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
switch(GetSystemMetrics(SM_CLEANBOOT))
{
case 0:
ShowMessage("正常模式啟動(dòng)");
break;
case 1:
ShowMessage("安全模式啟動(dòng)");
break;
case 2:
ShowMessage("安全模式啟動(dòng),但帶網(wǎng)絡(luò)附帶功能");
break;
default:
ShowMessage("錯(cuò)誤,系統(tǒng)啟動(dòng)有問題。");
break;
}
}
那么如何在C++ Builder程序中檢測當(dāng)前的Windows是以正常模式還是安全模式啟動(dòng)的?這需要使用到API函數(shù)GetSystemMetrics來進(jìn)行檢測。API函數(shù)GetSystemMetrics可以取得Windows的一些配置信息,比如,鼠標(biāo)的按鍵數(shù)、窗體的邊界寬度,它也可以測得當(dāng)前Windows所處的啟動(dòng)模式。
在Windows API中,該函數(shù)的定義如下:
int GetSystemMetrics( int nIndex );
其中參數(shù)nIndex的取值很多,如果只想檢測Windows的啟動(dòng)模式,只要取參數(shù)值為SM_CLEANBOOT即可,該值將確認(rèn)當(dāng)前的Windows是以何種模式啟動(dòng)的。它的返回值有三個(gè):
0:正常啟動(dòng)模式;
1:安全模式啟動(dòng)Windows;
2:以安全模式啟動(dòng),但是擁有網(wǎng)絡(luò)功能。
我們可以在程序的起始部分使用該函數(shù),如下面的示例中,我們根據(jù)Windows啟動(dòng)模式的不同,應(yīng)用程序顯示出不同的提示信息,用戶可以在實(shí)際編程中具體添加新的處理代碼。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
switch(GetSystemMetrics(SM_CLEANBOOT))
{
case 0:
ShowMessage("正常模式啟動(dòng)");
break;
case 1:
ShowMessage("安全模式啟動(dòng)");
break;
case 2:
ShowMessage("安全模式啟動(dòng),但帶網(wǎng)絡(luò)附帶功能");
break;
default:
ShowMessage("錯(cuò)誤,系統(tǒng)啟動(dòng)有問題。");
break;
}
}