如何用ATL的CRegKey类来操作注册表

12 篇文章 0 订阅

如何用CRegKey类来操作注册表

http://www.q.cc/2004/09/15/11509.html

 

CRegKey类来操作注册表是非常方便的。CRegKey类并不是一个MFC类,而是一个ATL类,所以在使用的时候不要忘记在StdAfx.h头文件中加入#include <atlbase.h>

1.打开需要查询注册表键:

原型是:

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

只有打开了一个注册表键才能对其值进行操作。

hKeyParent        打开的键的句柄。

lpszKeyName     键所在的注册表的路径。  

samDesired        注册表访问的安全性。

例子:

CRegKey rk;

LPCTSTR lp = "Software//Compupacific//NewEn//AddIns//AddButton";

if(rk.Open(HKEY_CURRENT_USER,lp)== ERROR_SUCCESS)

{

     AfxMessageBox(Successful!);

}

 

2. 获取注册表中某一键的键值:

LONG QueryValue( DWORD& dwValue,  LPCTSTR lpszValueName );

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

有两个函数,第一个是查询整型值,第二个是查询字符串类型的值。

下面分别对它们进行举例:

2.1取整型值

CRegKey rk;

DWORD dValue ;

 

LPCTSTR lp = "Software//Compupacific//NewEn//AddIns//AddButton";

if(rk.Open(HKEY_CURRENT_USER,lp)== ERROR_SUCCESS)

{

     if(rk.QueryValue( dValue,"LoadBehavior")==ERROR_SUCCESS)

     {

         CString temp;

         temp.Format("%d",dValue);

         SetDlgItemText(IDC_EDIT1,temp);

     }

     else

     {

         AfxMessageBox("Query Error");

     }

}

else

{

     AfxMessageBox("Open error!");

}

rk.Close();

 

2.2取字符串类型的值

CRegKey rk;

HKEY m_hKey;

DWORD pCount=1024;

CString KeyValue;

char szValue[1024];

 

 

LPCTSTR lp="Software//Compupacific//NewEn//AddIns//AddButton";

if(rk.Open(HKEY_CURRENT_USER,lp)== ERROR_SUCCESS)

{

     LPCTSTR lKeyName="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键值。

 

 

 

5. 其他的一些代码

     {

         IpAdd = new char[16];

         ZeroMemory(ServerIP,16);

         DBIP = new char[16];

         ZeroMemory(DataBaseIP,16);

         DWORD PORT;

 

         CRegKey Key;

         if(Key.Open(HKEY_CURRENT_USER,"SoftWare//XXXX") == ERROR_SUCCESS)

         {

              // 查询键值

              DWORD nLen;

              nLen = 16;

              Key.QueryMultiStringValue("SIP",IpAdd,&nLen);

              nLen = 16;

              Key.QueryMultiStringValue("DBIP",DBIP,&nLen);

 

              // 数值查询

              Key.QueryDWORDValue(_T("PORT"), PORT);

         }

         else     // 如果打开失败, 则创建一个

         {

              //

              Key.Create(HKEY_CURRENT_USER,"SoftWare//XXXX");

              Key.SetValue(HKEY_CURRENT_USER,"SoftWare//XXXX","192.168.0.9","IpAdd");

              Key.SetValue(HKEY_CURRENT_USER,"SoftWare//XXXX","192.168.0.2","DBIP");

              Key.SetDWORDValue("PORT", PORT);

              Key.SetStringValue("MyIP", "192.168.0.6", REG_SZ);

         }

     }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值