在軟體開發過程中,經常需要獲取機器的硬體資訊,例如用於軟體授權驗證、硬體指纹識別或系統診斷等場景。本文介紹一個封裝良好的 C++ 類別 CGetMachineInfo,能夠跨平台獲取硬碟的詳細物理資訊,支援 Windows 9x 與 NT 核心系列作業系統。
| 函數名稱 | 功能描述 |
|---|---|
ReadPhysicalDriveInNT() | 在 NT 核心系統下讀取硬碟物理資訊 |
ReadDrivePortsInWin9X() | 在 9x 核心系統下讀取硬碟物理資訊 |
ReadIdeDriveAsScsiDriveInNT() | 讀取 NT 系統下 SCSI 硬碟的物理資訊 |
ReturnInfo() | 收集磁碟物理資訊的主入口函數 |
ConvertToString() | 將整型變數轉換為字串格式 |
類別提供以下屬性來儲存獲取的硬碟資訊:
str_DN_Modol - 硬碟出廠型號str_DN_Serial - 硬碟序列號str_DN_ControllerRevision - 控制器韌體版本str_HardDeskSize - 硬碟容量(位元組)str_HardDeskBufferSize - 硬碟快取大小(位元組)str_HardDeskType - 硬碟類型str_Controller - 主/從硬碟標識str_HardDesk_Form - 硬碟索引(第幾顆硬碟)以下展示如何在對話框初始化時使用此類別:
BOOL CHardDeskInfoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CGetMachineInfo m_Info; // 建立類別實例,建構函數自動收集資訊
SetDlgItemText(IDC_HARDDESK_ID, m_Info.str_DN_Modol);
SetDlgItemText(IDC_STATIC_SERIAL, m_Info.str_DN_Serial);
SetDlgItemText(IDC_STATIC_CR, m_Info.str_DN_ControllerRevision);
SetDlgItemText(IDC_HARDDESK_SIZE, m_Info.str_HardDeskSize + _T(" bytes"));
SetDlgItemText(IDC_BUFFER_SIZE, m_Info.str_HardDeskBufferSize + _T(" bytes"));
SetDlgItemText(IDC_HARDDESK_TYPE, m_Info.str_HardDeskType);
SetDlgItemText(IDC_STATIC_Controller, m_Info.str_Controller);
return TRUE;
}

這個類別封裝了複雜的跨平台硬體資訊獲取邏輯,提供簡潔的介面供上層應用呼叫。原始碼開放供參考,開發者可根據需求擴展更多硬體資訊的獲取功能。