Windows 註冊表存儲繫統與應用程式關鍵配置。本文提供兩個完整 C++ 範例:枚舉 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 獲取已安裝程式資訊,以及向系統 PATH 環境變量安全追加路徑。
關鍵 API:RegOpenKeyEx、RegEnumKeyEx、RegQueryValueEx。遍歷子鍵,讀取 DisplayName、Publisher、DisplayVersion、InstallLocation 等值。
// 核心邏輯片段
HKEY hUninstallKey;
RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall", 0, KEY_READ, &hUninstallKey);
DWORD idx = 0, nameLen = 256;
char subKeyName[256];
while (RegEnumKeyExA(hUninstallKey, idx++, subKeyName, &nameLen, NULL, NULL, NULL, NULL) == ERROR_SUCCESS) {
HKEY hAppKey;
if (RegOpenKeyExA(hUninstallKey, subKeyName, 0, KEY_READ, &hAppKey) == ERROR_SUCCESS) {
// 讀取各字段...
RegCloseKey(hAppKey);
}
nameLen = 256;
}
RegCloseKey(hUninstallKey);
目標鍵:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment,值名 Path,類型 REG_EXPAND_SZ。
步驟:
Path 值(需兩次調用 RegQueryValueEx:第一次獲取大小,第二次讀取數據)。RegSetValueEx 寫回。WM_SETTINGCHANGE 通知系統環境變量更新(代碼中省略,實際部署需補充)。// 關鍵寫入邏輯
LONG ret = RegSetValueExA(hKey, "Path", 0, REG_EXPAND_SZ,
(const BYTE*)newPathStr, (DWORD)strlen(newPathStr) + 1);
if (ret != ERROR_SUCCESS) { /* 處理錯誤 */ }
HKLM 需管理員權限(UAC 提升)。ERROR_MORE_DATA、ERROR_FILE_NOT_FOUND 等返回碼。WM_SETTINGCHANGE。