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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CRegKey 注册表操作

發布時間:2023/12/13 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CRegKey 注册表操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.簡介

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

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

2.常用操作方法

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

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

hKeyParent參數指定了待打開的注冊表鍵的句柄,常用的可選值為

HKEY_CLASSES_ROOT

HKEY_CURRENT_USER

HKEY_LOCAL_MACHINE

HKEY_USERS

以上四個值分別代表了注冊表中最主要的四個分支;

lpszKeyName參數指定了在hKeyParent下需要打開的項的名字;

samDesired參數指定了打開該項后所擁有的權限,默認為KEY_ALL_ACCESS,表示擁有對該分支的所有操作權,包括讀和寫等。

?

舉例:

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

?

2) 查詢注冊表項中的某個鍵的鍵值

LONG QueryValue( DWORD& dwValue, LPCTSTR lpszValueName );

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

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

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

?

舉例:

比如,假設要獲得windowx系統默認的桌面壁紙的搜索路徑,由于這個路徑保存在HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion這一項的WallPaperDir鍵內,如下圖

所以,可以用以下的代碼來實現:

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: }

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

示例代碼如下:

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 );

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

示例,比如現在要給IE的工具欄設置一個背景圖片,可以在HKEY_CURRENT_USER/Software/Microsoft/Internet Explorer/Toolbar項下面新建一個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的背景圖片就被設置成了C:/WINDOWS/Web/Wallpaper/Bliss.bmp

4) 刪除鍵值

LONG DeleteValue( LPCTSTR lpszValue );

這個函數比較簡單,它會刪除lpszValue參數指定的鍵。

?

5) 新建項

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函數用于創建一個項,它可以在hKeyParent指定的分支下,創建一個名為lpszKeyName的項,后面幾個參數一般用默認的即可。

比如,現在要建立一個新的文件類型.spj的關聯方式,首先需要在HKEY_CLASSES_ROOT下建立一個名為.spj的項,代碼如下:

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) 刪除項

LONG DeleteSubKey( LPCTSTR lpszSubKey );

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

?

7) 關閉注冊表

LONG Close( );

關閉注冊表時,之前所做的修改才會被保存到硬盤。或者,也可以使用LONG RegFlushKey( HKEY hKey ); 函數在需要的時候將所做的修改及時寫入硬盤。?

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):? 創建新的key. 一般只用添加前兩個值。 CRegKey::SetValue(DWORD dwValue, LPCTSTRlpszValueName); 設置值。 CRegKey::SetValue(LPCTSTR lpszKeyName, LPCTSTRlpszValue, LPCTSTRlpszValueName);在當前打開的文件夾下在設置個lpszKeyName文件夾,名是lpszValueName的數據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的下面創建XZX\\4路徑,4下面有名是name的數據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!");
???}
?注意:打開要刪除的父文件夾,并且刪除的文件下面沒有值。 另一種方法: DWORD CTools::ReadReg(char *szName,LPCTSTRszValue)
{//szName這個注冊表名。?把值存到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;
}


總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。