首先來認識一下鍵,項,值吧:
左邊有五個根鍵:
hkey_classes_root
hkey_current_user
hkey_local_machine
hkey_user
hkey_current_config
根鍵展開後可以看到子健:像 "software, microsoft, windows, currentversion 等都是子健。
而最後一級便不是子健了,而是項:run。
「名稱欄」 下方的都稱為鍵值項。
「型別欄」 下方的都稱為鍵值項的型別。
「資料欄」 下方的都稱為 鍵值項的鍵值。
regcreatekeyex() 介紹:
功能:建立或開啟登錄檔鍵。
函式原型:long regcreatekeyex(
hkey hkey, // 鍵的控制代碼 (regcreatekey, regcreatekey() 的返回值) 或者 預定義的值( 即五個根鍵)。
lpctstr lpsubkey, // 指向 要建立或要開啟的子健名稱。
dword reserved, // 保留值必須為 0,
lptstr lpclass, // 指向乙個字串,該字串定義了該鍵的型別。可以為空。
dword dwoptions, // 新建立的鍵的屬性。
regsam samdesired, // 鍵的訪問許可權。
lpsecurity_attributes lpsecurityattributes, // 指向 security_attributes 結構的指標。
// 定義返回的控制代碼是否可以被子程序繼承,為 null 表示不繼承。
phkey phkresult, // 指向新建立或開啟的鍵的控制代碼的指標,儲存返回的控制代碼。
lpdword lpdwdisposition // 指明鍵是被建立還是被開啟的
);(入參,即輸入的引數。出參,即輸出的引數)
引數:dwoptions
reg_option_non_volatile 新建立的鍵為乙個非短暫性的鍵 (資料資訊儲存在檔案中,當系統重新啟動時,資料資訊恢復)
reg_option_volatile 新建立的鍵為乙個短暫性的鍵(資料資訊儲存在記憶體中)。
reg_option_backup_restore 僅在winnt中支援,可以提供優先順序支援。
引數:samdesired
key_create_link 准許生成符號鍵
key_create_sub_key 准許生成子鍵
key_enumerate_sub_keys 准許生成列舉子鍵
key_execute 准許進行讀操作
key_notify 准許更換通告
key_query_value 准許查詢子鍵
key_all_access 提供完全訪問,是上面數值的組合
key_read 是下面數值的組合:
key_query_value、key_enumerate_sub_keys、key_notify
key_set_value 准許設定子鍵的數值
key_write 是下面數值的組合:
key_set_value、key_create_sub_key
引數:lpdwdisposition (出參)
reg_created_new_key 鍵先前不存在,現在被建立。
reg_opened_existing_key 鍵先前已存在,現在被開啟。
返回值:如果函式呼叫成功,則返回 error_success。否則返回非零的錯誤**。
regopenkeyex() 介紹:
功能:開啟乙個已經存在的子健。
函式原型:lstatus regopenkeyex(
hkey hkey,
lpcstr lpsubkey,
dword uloptions, // 保留值必須為 0。
regsam samdesired,
phkey phkresult
);引數:同 regcreatekeyex()。
返回值:如果函式呼叫成功,則返回 error_success。否則返回非零的錯誤**。
regclosekey() 介紹:
功能:關閉登錄檔。
函式原型:long regclosekey(
hkey hkey // 釋放鍵的控制代碼。
);返回值:如果函式呼叫成功,則返回 error_success。否則返回非零的錯誤**。
regdeletekey() 介紹:
功能:刪除登錄檔鍵值。(不能刪除含有子健的子健)
函式原型:lstatus regdeletekey(
hkey hkey,
lpcstr lpsubkey,
regsam samdesired,
dword reserved // 保留值必須為 0。
);返回值:如果函式呼叫成功,則返回 error_success。否則返回非零的錯誤**。
regqueryvalueex() 介紹:
功能:檢索乙個已開啟的登錄檔控制代碼中,指定的登錄檔鍵的型別和設定值。
函式原型:lstatus regqueryvalueexa(
hkey hkey, // 已開啟項的控制代碼,或者指定乙個標準項名。
lpcstr lpvaluename, // 要查詢登錄檔鍵值的名字字串,登錄檔鍵的名字,以空字元結束。
lpdword lpreserved, // 保留值必須為 0。
lpdword lptype, //用於裝載取回資料型別的乙個指標變數。
lpbyte lpdata, //用於裝載指定值的乙個緩衝區,可以為空。
lpdword lpcbdata //用於裝載 lpdata 緩衝區長度的乙個變數。一旦返回,它會設為實際裝載到緩衝區的位元組數。
// 若 lpdata 為 null, 則也為 null。
);引數:lptype為乙個指向資料型別的指標,資料型別為下列型別之一:
reg_binary 二進位制資料
reg_dword 32位整數
reg_dword_little_endian little-endian格式的資料,例如0x12345678以(0x78 0x56 0x34 0x12)方式儲存
reg_dword_big_endian big-endian格式的資料,例如0x12345678以(0x12 0x34 0x56 0x78)方式儲存
reg_expand_sz 乙個包含未擴充套件環境變數的字串
reg_link 乙個unicode型別的鏈結
reg_mulit_sz 以兩個零結尾的字串
reg_none 無型別數值
reg_resource_list 裝置驅動資源列表
reg_sz 乙個以零結尾的字串根據函式使用的字符集型別的不同而設定為unicode或ansi型別的字串。
返回值:如果函式呼叫成功,則返回 error_success。否則返回非零的錯誤**。
regsetvalueex() 介紹:
功能:在登錄檔項下設定指定值的資料和型別。
函式原型:long regsetvalueex(
hkey hkey,
lpctstr lpvaluename,
dword reserved,// 保留值必須為0。
dword dwtype,
const byte *lpdata,
dword cbdata
);引數:同 regqueryvalueex()。
返回值:如果函式呼叫成功,則返回 error_success。否則返回非零的錯誤**。
regdeletevalue() 介紹:
功能:刪除指定項下方的乙個值。
函式原型:lstatus regdeletevalue(
hkey hkey,
lpcstr lpvaluename // 指向要刪除的值名。
);返回值:如果函式呼叫成功,則返回 error_success。否則返回非零的錯誤**。
demo code:(注意:能修改成功的登錄檔一般都在 hkey_current_user 這個根鍵裡)
#include#includeint main(void
) long0 =regsetvalueex(hkey,
"start page",
0,reg_sz,
(const byte *)buffer,
strlen(buffer));
if (long0 !=error_success)
printf(
"modify succeed!\n");
system(
"pause");
return0;
}
登錄檔操作 API
1 regopenkey 開啟登錄檔 2 regsetvalueex 設定登錄檔鍵值和鍵型別 3 regdeletevalue 刪除登錄檔 4 regclosekey 關閉登錄檔 long regsetvalueex hkey hkey,lpctstr lpvaluename,dword reser...
登錄檔操作常用API使用
1 regcreatekeyex 通過regcreatekeyex函式可以在登錄檔中建立鍵,如果需要建立的鍵已經存在了,則開啟鍵。函式原型如下 long regcreatekeyex hkey hkey,lpctstr lpsubkey,dword reserved,lptstr lpclass,d...
登錄檔程式設計掃盲(三
三。regqueryvalueex和regenumvalue 以上都是在說如何寫登錄檔,不過很多情況下都要讀登錄檔的。啊,來看一下有哪幾個api,1,2,怎麼又這麼多?算了,就說兩個吧,應該夠用了的。還是先說一下regqueryvalueex吧,這回看不出什麼意思了,query是什麼意思呢?別急,我...