用C++Builder檢測Windows的啟動(dòng)模式

字號(hào):

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;
     }
     }