首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

C++Builder 偵測 Windows 啟動模式:正常模式 vs 安全模式

     編輯:更多程式設計知識

Windows 9x/2000/XP 支援多種啟動模式:正常模式、安全模式、帶網路安全模式。某些應用程式(多媒體、網路服務)在安全模式下功能受限,需於啟動時偵測並提示使用者或調整行為。C++Builder 可透過 Windows API GetSystemMetrics(SM_CLEANBOOT) 輕鬆實現。

API 定義與參數


int GetSystemMetrics(int nIndex);
// nIndex = SM_CLEANBOOT (0x0067) 專門用於偵測啟動模式

返回值對照

返回值啟動模式特徵
0正常模式完整驅動程式與服務載入
1安全模式最小驅動集合,無網路、無多媒體
2帶網路安全模式安全模式 + 網路驅動

完整實作範例


#include 
#pragma hdrstop
#include  // GetSystemMetrics 宣告
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) {}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    int mode = GetSystemMetrics(SM_CLEANBOOT);
    switch (mode) {
        case 0:
            ShowMessage("正常模式啟動 - 所有功能可用");
            break;
        case 1:
            ShowMessage("安全模式啟動 - 多媒體/網路功能受限");
            // 可選:停用相關功能按鈕、記錄日誌、引導使用者重啟
            break;
        case 2:
            ShowMessage("帶網路安全模式啟動 - 基本網路可用,多媒體受限");
            break;
        default:
            ShowMessage("未知啟動模式,系統可能異常");
            break;
    }
}

進階應用:啟動時自動偵測並調整行為


// 專案原始碼 (.cpp) 或主表單 OnCreate
int bootMode = GetSystemMetrics(SM_CLEANBOOT);
if (bootMode != 0) {
    // 安全模式下的應對策略
    Application->MessageBox(
        "偵測到安全模式啟動。\n部分功能(影音播放/網路同步)將不可用。\n建議重新啟動進入正常模式。",
        "啟動模式提醒", MB_OK | MB_ICONWARNING
    );
    // 範例:停用需多媒體/網路的功能選單
    MenuItemMultimedia->Enabled = false;
    MenuItemNetworkSync->Enabled = false;
    // 記錄啟動模式供診斷
    LogEvent(Format("Boot mode: %d (0=Normal,1=Safe,2=Safe+Net)", bootMode));
}

適用版本與注意事項

  • 支援系統:Windows 95/98/Me/2000/XP/2003/Vista/7/8/10/11 (SM_CLEANBOOT 於所有 NT 核心版本持續支援)。
  • 64 位元應用:C++Builder 10.3+ 支援 64-bit 編譯,API 呼叫無需修改。
  • Vista+ UAC:安全模式定義擴展為「最小驅動集合」,SM_CLEANBOOT 行為一致。
  • 替代方案:WMI Win32_ComputerSystem.BootupState ("Normal boot"/"Safe boot"),但需 COM 初始化,較重量級。

結語

單一 API 呼叫 GetSystemMetrics(SM_CLEANBOOT) 即可可靠偵測 Windows 啟動模式。在應用程式啟動早期(WinMain、專案原始碼或主表單 OnCreate)執行偵測,依模式調整功能可用性、提示使用者或記錄診斷資訊,能顯著提升軟體在受限環境下的健壯度與使用者體驗。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved