日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CRegKey 注册表操作

發(fā)布時(shí)間:2023/12/13 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CRegKey 注册表操作 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.簡介

CRegKey提供了對(duì)系統(tǒng)注冊(cè)表的操作方法,通過CRegKey類,可以方便的打開注冊(cè)表的某個(gè)分支或子鍵(CRegKey::Open),可以方便的修改一個(gè)鍵的鍵值(CRegKey::SetValue),也可以查詢某個(gè)鍵的鍵值(CRegKey::QueryValue),操作完成之后,可以關(guān)閉子鍵(CRegKey::Close)。

要想使用CRegKey類,需要包含頭文件atlbase.h

2.常用操作方法

1) 打開需要查詢或修改的注冊(cè)表鍵

LONG Open( HKEY hKeyParent, LPCTSTR lpszKeyName, REGSAM samDesired = KEY_ALL_ACCESS );

hKeyParent參數(shù)指定了待打開的注冊(cè)表鍵的句柄,常用的可選值為

HKEY_CLASSES_ROOT

HKEY_CURRENT_USER

HKEY_LOCAL_MACHINE

HKEY_USERS

以上四個(gè)值分別代表了注冊(cè)表中最主要的四個(gè)分支;

lpszKeyName參數(shù)指定了在hKeyParent下需要打開的項(xiàng)的名字;

samDesired參數(shù)指定了打開該項(xiàng)后所擁有的權(quán)限,默認(rèn)為KEY_ALL_ACCESS,表示擁有對(duì)該分支的所有操作權(quán),包括讀和寫等。

?

舉例:

1: CRegKey myKey; 2: if(myKey.Open(HKEY_LOCAL_MACHINE, "SOFTWARE//Microsoft//Windows") != ERROR_SUCCESS) 3: { 4: AfxMessageBox("Error open reg key!!"); 5: }

?

2) 查詢注冊(cè)表項(xiàng)中的某個(gè)鍵的鍵值

LONG QueryValue( DWORD& dwValue, LPCTSTR lpszValueName );

LONG QueryValue( LPTSTR szValue, LPCTSTR lpszValueName, DWORD* pdwCount )

查詢鍵值提供了兩種形式,分別用來獲取數(shù)值類型的值和字符串類型的值。在上面的形式中,第一種用于獲取數(shù)值類型的值,第二種用于獲取字符串類型的值。

lpszValueName參數(shù)用來指定鍵的名稱,dwValue和szValue用于保存鍵值,而pdwCount用來控制獲取到的字符串值的長度

?

舉例:

比如,假設(shè)要獲得windowx系統(tǒng)默認(rèn)的桌面壁紙的搜索路徑,由于這個(gè)路徑保存在HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion這一項(xiàng)的WallPaperDir鍵內(nèi),如下圖

所以,可以用以下的代碼來實(shí)現(xiàn):

1: CRegKey myKey; 2: if(myKey.Open(HKEY_LOCAL_MACHINE, "SOFTWARE//Microsoft//Windows//CurrentVersion") != ERROR_SUCCESS) 3: AfxMessageBox("Error open reg key!!!"); 4: else 5: { 6: char szPath[MAX_PATH]; 7: DWORD dwLen = myKey.QueryValue(szPath, "WallPaperDir", MAX_PATH); 8: }

另外,如果我們想查詢某個(gè)項(xiàng)的默認(rèn)鍵值該怎么辦呢?只需要將lpszValueName參數(shù)寫為空字符串就好了。比如現(xiàn)在想看一下.txt類型的文件的關(guān)聯(lián)程序是誰,我們需要首先在HKEY_CLASSES_ROOT下找到.txt項(xiàng),然后看它的默認(rèn)鍵值是多少:

示例代碼如下:

1: CRegKey myKey; 2: if(myKey.Open(HKEY_CLASSES_ROOT, ".txt") != ERROR_SUCCESS) 3: AfxMessageBox("Error open key!!!"); 4: else 5: { 6: char szFileType[255]; 7: DWORD dwLen = myKey.QueryValue(szFileType, "", sizeof(szFileType)); 8: }

3) 添加或修改鍵值

LONG SetValue( DWORD dwValue, LPCTSTR lpszValueName );

LONG SetValue( LPCTSTR lpszValue, LPCTSTR lpszValueName = NULL );

LONG SetValue( HKEY hKeyParent, LPCTSTR lpszKeyName, LPCTSTR lpszValue, LPCTSTR lpszValueName = NULL );

添加鍵值函數(shù)提供了三種形式,前兩種分別用來向當(dāng)前已經(jīng)打開的這個(gè)項(xiàng)中添加DWORD類型的鍵、字符串類型的鍵,最后一種形式的函數(shù),可以在某個(gè)特定的分支線下的某個(gè)特定的項(xiàng)內(nèi)添加一個(gè)鍵。如果lpszKeyName指定的鍵不存在,則添加這個(gè)鍵,否則,就是修改已經(jīng)存在的鍵的鍵值。另外需要注意的是,最后一種形式的SetValue函數(shù),如果lpszKeyName所指定的項(xiàng)不存在,則SetValue函數(shù)會(huì)返回錯(cuò)誤,而不會(huì)添加一個(gè)項(xiàng)。

示例,比如現(xiàn)在要給IE的工具欄設(shè)置一個(gè)背景圖片,可以在HKEY_CURRENT_USER/Software/Microsoft/Internet Explorer/Toolbar項(xiàng)下面新建一個(gè)BackBitmap的字符串鍵,并制定背景圖片的位置,代碼如下:

1: CRegKey myKey; 2: if(myKey.Open(HKEY_CURRENT_USER, "Software//Microsoft//Internet Explorer//Toolbar") != ERROR_SUCCESS) 3: AfxMessageBox("error open reg key!!!"); 4: else 5: { 6: myKey.SetValue("C://WINDOWS//Web//Wallpaper//Bliss.bmp", "BackBitmap"); 7: }

這樣,IE的背景圖片就被設(shè)置成了C:/WINDOWS/Web/Wallpaper/Bliss.bmp

4) 刪除鍵值

LONG DeleteValue( LPCTSTR lpszValue );

這個(gè)函數(shù)比較簡單,它會(huì)刪除lpszValue參數(shù)指定的鍵。

?

5) 新建項(xiàng)

LONG Create( HKEY hKeyParent, LPCTSTR lpszKeyName, LPTSTR lpszClass = REG_NONE, DWORD dwOptions = REG_OPTION_NON_VOLATILE, REGSAM samDesired = KEY_ALL_ACCESS, LPSECURITY_ATTRIBUTES lpSecAttr = NULL, LPDWORD lpdwDisposition = NULL );

Create函數(shù)用于創(chuàng)建一個(gè)項(xiàng),它可以在hKeyParent指定的分支下,創(chuàng)建一個(gè)名為lpszKeyName的項(xiàng),后面幾個(gè)參數(shù)一般用默認(rèn)的即可。

比如,現(xiàn)在要建立一個(gè)新的文件類型.spj的關(guān)聯(lián)方式,首先需要在HKEY_CLASSES_ROOT下建立一個(gè)名為.spj的項(xiàng),代碼如下:

1: CRegKey myKey; 2: if(myKey.Create(HKEY_CLASSES_ROOT, ".spj") != ERROR_SUCCESS) 3: AfxMessageBox("error create key!!!"); 4: else 5: AfxMessageBox("create key ok!");

6) 刪除項(xiàng)

LONG DeleteSubKey( LPCTSTR lpszSubKey );

該函數(shù)可以刪除名為lpszSubKey的項(xiàng),以及該項(xiàng)下的所有的鍵。注意,被刪除的項(xiàng)不能含有子項(xiàng)!可以通過另外一個(gè)函數(shù)LONG RecurseDeleteKey( LPCTSTR lpszKey );刪除某個(gè)項(xiàng)以及該項(xiàng)下的所有內(nèi)容。

?

7) 關(guān)閉注冊(cè)表

LONG Close( );

關(guān)閉注冊(cè)表時(shí),之前所做的修改才會(huì)被保存到硬盤。或者,也可以使用LONG RegFlushKey( HKEY hKey ); 函數(shù)在需要的時(shí)候?qū)⑺龅男薷募皶r(shí)寫入硬盤。?

8


CRegkey::Creat(HKEY hKeyParent, LPCTSTRlpszKeyName, LPTSTRlpszClass = REG_NONE,DWORD dwOptions = REG_OPTION_NON_VOLATILE, REGSAMsamDesired= KEY_ALL_ACCESS, LPSECURITY_ATTRIBUTESlpSecAttr = NULL, LPDWORD lpdwDisposition =NULL):? 創(chuàng)建新的key. 一般只用添加前兩個(gè)值。 CRegKey::SetValue(DWORD dwValue, LPCTSTRlpszValueName); 設(shè)置值。 CRegKey::SetValue(LPCTSTR lpszKeyName, LPCTSTRlpszValue, LPCTSTRlpszValueName);在當(dāng)前打開的文件夾下在設(shè)置個(gè)lpszKeyName文件夾,名是lpszValueName的數(shù)據(jù)lpszValue。 例如:CRegKey rKey; ????if(rKey.Creat(HKEY_CURRENT_USER,"XZX\\4")==ERROR_SUCESS) ??????if(rk.SetValue(123,"name")==ERROR_SUCCESS)
???????{
???????AfxMessageBox("Successful!");
????????rk.Close();
?????????}
remark:在根為?HKEY_CURRENT_USER的下面創(chuàng)建XZX\\4路徑,4下面有名是name的數(shù)據(jù)123。???????????????????????????????????????????????????????CRegKey::Open(HKEYhKeyParent, LPCTSTRlpszKeyName, REGSAMsamDesired =KEY_ALL_ACCESS);???打開路徑。 CRegKey::DeleteValue(LPCTSTR lpszValue):刪除打開路徑下邊的值。 例如:if(rKey.Open(HKEY_CURRENT_USER,"XZX\\4")==ERROR_SUCESS) ???????if(rKey.DeleteValue("name")==ERROR_SUCESS) ????????AfxMessageBox("CreatSucessful!!?"); ????????rKey.Close(); CRegKey::DeleteSubKey(LPCTSTR lpszSubKey):刪除SubKey。 例如? if(rk.Open(HKEY_CURRENT_USER,"XZX")==ERROR_SUCCESS)
??? if(rk.DeleteSubKey("4")==ERROR_SUCCESS)
??? {
????AfxMessageBox("sucess!");
???}
?注意:打開要?jiǎng)h除的父文件夾,并且刪除的文件下面沒有值。 另一種方法: DWORD CTools::ReadReg(char *szName,LPCTSTRszValue)
{//szName這個(gè)注冊(cè)表名。?把值存到szValue。
?DWORD dwRes=1;
?HKEY hKey;
?if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
??g_szFullKey,
??NULL,KEY_ALL_ACCESS,&hKey)!=ERROR_SUCCESS)
??return FALSE;
?
?DWORDdwType,dwLen=SHORT_LEN;??
?
?if(RegQueryValueEx(hKey,szName,NULL,&dwType,(BYTE*)szValue,&dwLen)!=ERROR_SUCCESS)
??dwRes=0;
?if(RegCloseKey(hKey)!=ERROR_SUCCESS)
??dwRes=0;
?
?return dwRes;
}


總結(jié)

以上是生活随笔為你收集整理的CRegKey 注册表操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。