用CRegKey類來操作註冊表是非常方便的。CRegKey類並不是一個MFC類,而是一個ATL類,所以在使用的時候不要忘記在StdAfx.h頭文件中加入
#include <atlbase.h>。
1.打開需要查詢註冊表鍵:
原型是:LONG Open( HKEY hKeyParent, LPCTSTR lpszKeyName, REGSAM samDesired = KEY_ALL_ACCESS );
只有打開了一個註冊表鍵才能對其值進行操作。
hKeyParent:打開的鍵的句柄。
lpszKeyName:鍵所在的註冊表的路徑。
samDesired:註冊表訪問的安全性。
例子:
CRegKeyrk;
LPCTSTRlp="Software//Compupacific//NewEn//AddIns//AddButton";
if(rk.Open(HKEY_CURRENT_USER,lp)== ERROR_SUCCESS)
{
AfxMessageBox(“Successful!”0);
}
2.獲取註冊表中某一鍵的鍵值:
LONG QueryValue( DWORD& dwValue, LPCTSTR lpszValueName );
LONG QueryValue( LPTSTR szValue, LPCTSTR lpszValueName, DWORD* pdwCount );
有兩個函數,第一個是查詢整型值,第二個是查詢字符串類型的值。下面分別對它們進行舉例:
//取整型值
CRegKeyrk;
DWORDdValue ;
LPCTSTRlp="Software//Compupacific//NewEn//AddIns//AddButton";
if(rk.Open(HKEY_CURRENT_USER,lp)== ERROR_SUCCESS)
{
if(rk.QueryValue( dValue,"LoadBehavior")==ERROR_SUCCESS)
{
CStringtemp;
temp.Format("%d",dValue);
SetDlgItemText(IDC_EDIT1,temp);
}
else
{
AfxMessageBox("Query Error");
}
}
else
{
AfxMessageBox("Open error!");
}
rk.Close();
//取字符串類型的值
CRegKeyrk;
HKEYm_hKey;
DWORDpCount=1024;
CStringKeyValue;
charszValue[1024];
LPCTSTRlp="Software//Compupacific//NewEn//AddIns//AddButton";
if(rk.Open(HKEY_CURRENT_USER,lp)== ERROR_SUCCESS)
{
LPCTSTRlKeyName="Description";
if(rk.QueryValue(szValue,lKeyName,& pCount)== ERROR_SUCCESS)
{
KeyValue=szValue;
SetDlgItemText(IDC_EDIT1,KeyValue);
}
else
{
SetDlgItemText(IDC_EDIT1,"Query error");
}
//rk.SetValue(lKeyName,"HH");
}
else
{
SetDlgItemText(IDC_EDIT1,"Open error");
}
rk.Close();
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 );
有三個重載函數,大同小異。我們針對第二個舉例,舉一反三:
LONG lResult = 0;
CRegKey reg;
//open the required registry key
LPCTSTR lpszKey = "Software//Microsoft//Internet Explorer//Toolbar";
lResult = reg.Open(HKEY_CURRENT_USER,lpszKey);
//check if opened successfully
if(ERROR_SUCCESS != lResult)
{
return FALSE;
}
//set the value
lResult = reg.SetValue(m_szFilePath,"BackBitmap");
if(ERROR_SUCCESS != lResult)
{
return FALSE;
}
//done, close and return success
reg.Close();
m_szFilepath是一張圖片的位置,通過這個函數,你的IE工具欄的背景就變成的你指定的圖片了,很爽吧。
4. 刪除一個鍵值:
LONG DeleteValue( LPCTSTR lpszValue );
lpszValue:你要刪除的鍵值的名字.
例子:
LONG lResult = 0;
CRegKey reg;
//open the required registry key
LPCTSTR lpszKey = "Software//Microsoft//Internet Explorer//Toolbar";
lResult = reg.Open(HKEY_CURRENT_USER,lpszKey);
//check if opened successfully
if(ERROR_SUCCESS != lResult)
{
return FALSE;
}
//delete the value "BackBitmap" from toolbar
lResult = reg.DeleteValue("BackBitmap");
//check if deleted successfully
if(ERROR_SUCCESS != lResult)
{
return FALSE; //perhaps value not found, if skin is not set
}
//done, return success
reg.Close();
這樣就去掉了你給IE工具欄設定的背景圖片,也就是刪掉了IE工具欄的BackBitmap鍵值。
一般來說最主要的操作就是這些了,是不是很簡單啊。