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