寫這篇日誌以前不是沒有接觸過c++來操作登錄檔,但這次的體會更深入了一點,故筆記如下。
首先可以從「登錄檔reg檔案語法規則 」了解下.reg檔案的語法規則,因為很多時候是把.reg裡的**轉換為程式裡的啊。
知道語法後,可以根據裡面的**開始逐個轉化為c++**了。
首先是建立hkey,呼叫regcreatekey或
regcreatekeyex函式。
函式定義:long regcreatekeyex(hkey hkey,//已經開啟的鍵的控制代碼,或者直接是上述幾個根鍵
lpctstr lpsubkey,//要建立的子鍵名字的位址
dword uloptions,//保留值,必須為0
regsam samdesired,//開啟方式,如讀還是寫
phkey phkresult//返回的建立的子鍵的控制代碼);
建立之後就是插入值了,也是有
regsetvalue和
regsetvalueex函式,可是我強烈建議光用後者。
函式定義:long regsetvalueex(hkey hkey,//要設定的鍵的控制代碼
lpctstr lpvaluename,//要訪問的鍵值的名稱
lpdword lpreserved,//保留值
dword dwtype,//要設定的資料的型別
const byte *lpdata,//要設定的健值
dword cbdata//資料的長度);
還有些情況會用到查詢登錄檔的函式,regqueryvalue和
regqueryvalueex。
函式定義:long regqueryvalueex(hkey hkey,//要查詢的鍵的控制代碼
lpctstr lpvaluename,//要查詢的鍵值的名稱
lpdword lpreserved,//保留值,必須為0
lpdword lptype,//要查詢的資料的型別,如果不關心,可以為null
lpbyte lpdata,//要返回的查詢的資料
lpdword lpcbdata//預置的資料的長度,理論上可以為null,但實際我發現不行,最好設乙個值);
view source
print?
01
hkey
key;
02
cstring strname =
"hello"
;
03
cstring strcompany =
"world"
;
04
cstring strseries =
"1111-1111"
;
05
bool
g_bislicesed =
true
;
06
07
if
(regopenkeyex(hkey_current_user, _t(
), 0, key_all_access, &hkey)!= error_success)
08
11
12
verify(!regsetvalueex(hkey, _t(
"licesedbool"
), 0, reg_dword, (
byte
*)&g_bislicesed, 4));
13
verify(!regsetvalueex(hkey, _t(
"user name"
), 0, reg_sz, (
byte
*)strname.getbuffer(strname.getlength()), 50));
14
verify(!regsetvalueex(hkey, _t(
"company name"
), 0, reg_sz, (
byte
*)strcompany.getbuffer(strcompany.getlength()),25));
15
verify(!regsetvalueex(hkey, _t(
"license code"
), 0, reg_sz, (
byte
*)strseries.getbuffer(strseries.getlength()), 20));
16
regclosekey(hkey);
c 操作登錄檔
1.讀取指定名稱的登錄檔的值 private string getregistdata string name 以上是讀取的登錄檔中hkey local machine software目錄下的 目錄中名稱為name的登錄檔值 2.向登錄檔中寫資料 private void wtregedit st...
C 操作登錄檔
windows 作業系統的登錄檔包含了很多有關計算機執行的配置方式,開啟登錄檔我們可以看到登錄檔是按類似於目錄的樹結構組織的,其中第二級目錄包含了五個預定義主鍵分別是 hkey classes root,hkey current user,hkey local machine,hkey users,...
C 操作登錄檔
用.net下託管語言c 操作登錄檔,主要內容包括 登錄檔項的建立,開啟與刪除 鍵值的建立 設定值 修改 讀取和刪除 判斷登錄檔項是否存在 判斷鍵值是否存在。準備工作 1 要操作登錄檔,我們必須要引入必要的命名空間 using microsoft.win32 classesroot,currentus...