註冊表操作是 Windows 程式開發的高頻需求,但原生 API(RegOpenKeyEx、RegQueryValueEx...)參數繁瑣、易出錯。本文提供封裝良好的 CRegistry 類,以 MFC 風格介面簡化常見讀寫、建立、刪除、備份/還原操作,附帶完整原始碼可直接納入專案。
| 方法 | 功能 | 範例 |
|---|---|---|
CreateKey(LPCTSTR lpSubKey) | 建立指定子鍵 | CreateKey(_T("Staff")); |
Open(LPCTSTR lpSubKey) | 開啟現有子鍵 | Open(_T("Software\\Staff")); |
Read(LPCTSTR lpValue, CString* pVal) | 讀取字串值 | Read(_T("Name"), &str); |
Read(LPCTSTR lpValue, DWORD* pVal) | 讀取 DWORD 值 | Read(_T("Age"), &dw); |
Read(LPCTSTR lpValue, int* pVal) | 讀取整數值 | Read(_T("Count"), &n); |
Write(LPCTSTR lpValue, LPCTSTR pVal) | 寫入字串值 | Write(_T("Name"), _T("John")); |
Write(LPCTSTR lpValue, DWORD dwVal) | 寫入 DWORD 值 | Write(_T("Age"), 30); |
Write(LPCTSTR lpValue, int nVal) | 寫入整數值 | Write(_T("Count"), 100); |
DeleteKey(HKEY hRoot, LPCTSTR lpSubKey) | 刪除子鍵(含遞迴) | DeleteKey(HKEY_LOCAL_MACHINE, _T("Staff")); |
DeleteValue(LPCTSTR lpValue) | 刪除指定值 | DeleteValue(_T("Name")); |
SaveKey(LPCTSTR lpFile) | 將鍵/子鍵/值導出 .reg 檔 | SaveKey(_T("backup.reg")); |
RestoreKey(LPCTSTR lpFile) | 從 .reg 檔還原 | RestoreKey(_T("backup.reg")); |
Close() | 釋放目前開啟的鍵句柄 | reg.Close(); |
CRegistry reg;
if (reg.Open(_T("Software\\MyApp"))) {
CString strVer;
if (reg.Read(_T("Version"), &strVer)) {
// 讀取成功
}
reg.Write(_T("LastRun"), COleDateTime::GetCurrentTime().Format());
reg.Close();
}
CString/DWORD/int 多載,型別安全。Close(),防止句柄洩漏。BOOL,簡化呼叫端判斷。Open 可指定完整路徑(含 HKEY_CURRENT_USER 等前綴),靈活操作不同根鍵。將 Registry.h/cpp 加入專案,#include "Registry.h" 即可使用。無額外依賴,純 Win32 API 實現,相容所有 Windows 版本。
附件提供完整類別實作與簡易測試對話框專案。