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

原创 2007年09月24日 16:06:00
 用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键值。
 
 
一般来说最主要的操作就是这些了,是不是很简单啊。

C++使用CRegKey类对注册表操作

CRegKey myKey; if(myKey.Open(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Int...
  • bojie5744
  • bojie5744
  • 2014年09月29日 12:33
  • 1554

如何用CRegKey类来操作注册表

用CRegKey类来操作注册表是非常方便的。CRegKey类并不是一个MFC类,而是一个ATL类,所以在使用的时候不要忘记在StdAfx.h头文件中加入#include 。   1.打开需要查询注册表...
  • guanjinke
  • guanjinke
  • 2004年09月15日 14:07
  • 1019

CRegKey类来操作注册表

CRegKey Members  Visual Studio 2005 Other Versions 2 out of 5 rated thi...
  • syflyhua
  • syflyhua
  • 2012年04月16日 14:37
  • 752

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

如何用ATL的CRegKey类来操作注册表
  • cay22
  • cay22
  • 2010年07月23日 14:13
  • 2237

C++对注册表常见操作的封装实现

1、头文件(声明)/*********************************************************************  文件名:RegOperator.h* ...
  • eaglewood2005
  • eaglewood2005
  • 2009年04月15日 16:47
  • 4136

CRegKey类操作注册表

用CRegKey类来操作注册表是非常方便的。CRegKey类并不是一个MFC类,而是一个ATL类,所以在使用的时候不要忘记在StdAfx.h头文件中加入#include 。  1.打开需要查询注册表键...
  • ssrs626
  • ssrs626
  • 2008年09月24日 17:46
  • 533

c++操作注册表

一  1.       注册表简介 注册表是为Windows NT和Windows95中所有32位硬件/驱动和32位应用程序设计的数据文件,用于存储系统和应用程序的设置信息。16位驱动在Winnt...
  • yu12345678900
  • yu12345678900
  • 2015年05月02日 22:22
  • 719

CRegKey::QueryValue连续读取注册表时读不出来值的解决办法

CRegKey regKey;  DWORD dwBufLen = MAX_PATH;  TCHAR szBuf[MAX_PATH];  memset(szBuf, 0, MAX_PATH); ...
  • ccx_john
  • ccx_john
  • 2013年11月21日 20:11
  • 896

注册表项无法操作在Windows7环境下(Can't Open Registry by Using CRegKey::Open )遍历注册表项

最近做一个注册表扫描的项目,遇到一些问题,现已解决,拿出来分享分享,大家见笑了! 编写一个MFC程序,用CRegKey生成的对象reg的Open()函数打开注册表居然只能用KEY_READ权限,用KE...
  • ywwzq0507
  • ywwzq0507
  • 2010年07月30日 20:47
  • 2459

五.如何用批处理文件来操作注册表

在入侵过程中经常回操作注册表的特定的键值来实现一定的目的,例如:为了达到隐藏后门、木马程序而删除Run下残余的键值。或者创建一个服务用以加载后 门。当然我们也会修改注册表来加固系统或者改变系统的某个属...
  • xingpidong
  • xingpidong
  • 2016年12月06日 23:02
  • 180
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何用CRegKey类来操作注册表(转)
举报原因:
原因补充:

(最多只允许输入30个字)