如何用CRegKey类来操作注册表(转)

 用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!”0);
}
2 . 获取注册表中某一键的键值:
    LONG QueryValue( DWORD& dwValue , LPCTSTR lpszValueName );
LONG QueryValue( LPTSTR szValue , LPCTSTR lpszValueName , DWORD* pdwCount )
有两个函数,第一个是查询整型值,第二个是查询字符串类型的值。下面分别对它们进行举例:
// 取整型值
       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 ();
//取字符串类型的值
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键值。
 
 
一般来说最主要的操作就是这些了,是不是很简单啊。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值