在 Windows 註冊表中,根鍵值是最頂層的分類,常見的有 HKEY_USERS、HKEY_LOCAL_MACHINE 等。當你啟動 regedit 時,左側樹狀結構展示的就是這些根鍵。在 C++Builder 的 TRegIniFile 類別中,預設的根鍵是 HKEY_USERS,這意味著若不指定,讀寫操作將針對當前使用者的設定。
以下範例展示如何使用 TRegistry 將應用程式路徑寫入 Run 鍵值,實現開機自動啟動。TRegIniFile 的操作方式大同小異,只需注意根鍵設定即可。
void __fastcall TfrmMainForm::WriteToMyRegistry(int table_count)
{
// 建立註冊表物件
TRegistry *MyRegistry = new TRegistry;
// 變更預設根鍵為本機電腦,影響所有使用者
MyRegistry->RootKey = HKEY_LOCAL_MACHINE;
// 開啟目標鍵值:軟體\Microsoft\Windows\CurrentVersion\Run
// 第二個參數 true 表示若鍵不存在則建立
if (!MyRegistry->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run", true))
{
Application->MessageBox("註冊表內容無效", "讀取註冊表出錯", MB_ICONERROR);
MyRegistry->CloseKey();
delete MyRegistry;
return;
}
// 寫入字串值:名稱 "myrun",資料為執行檔完整路徑
MyRegistry->WriteString("myrun", "c:\\sthvcd\\sthvcd.exe");
// 關閉鍵值並釋放資源
MyRegistry->CloseKey();
delete MyRegistry;
}
HKEY_LOCAL_MACHINE 需管理員權限,HKEY_CURRENT_USER 則僅影響目前使用者。true 確保鍵值存在。實務上,建議搭配 TRegIniFile 進行 INI 風格的區段操作,或使用 TRegistry 進行更底層的鍵值控制。記得在寫入 HKEY_LOCAL_MACHINE 時,應用程式需以管理員身分執行,否則會遭拒絕存取。