`
king_tt
  • 浏览: 2191379 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

VC 读写注册表

 
阅读更多
近来由于需要在自己写的程序中对注册表进行操作。总结些经验,并做个一个DEMO供日后使用,现在把它拿出来和大家分享…

为了使用方便,把一些操作写成了函数,以便方便调用,具体代码如下所示:

一、定义

HKEY hKey;
char content[256];		//所查询注册表键值的内容
DWORD dwType=REG_SZ;		//定义读取数据类型
DWORD dwLength=256;
struct HKEY__*RootKey;		//注册表主键名称
TCHAR *SubKey;			//欲打开注册表项的地址
TCHAR *KeyName;			//欲设置项的名字
TCHAR *ValueName;		//欲设置值的名称
LPBYTE SetContent_S;		//字符串类型
int SetContent_D[256];		//DWORD类型
BYTE SetContent_B[256];		//二进制类型
int ShowContent (struct HKEY__*ReRootKey,TCHAR *ReSubKey,TCHAR *ReValueName);
int SetValue_S (struct HKEY__*ReRootKey,TCHAR *ReSubKey,TCHAR *ReValueName,LPBYTE ReSetContent_S);
int SetValue_D (struct HKEY__*ReRootKey,TCHAR *ReSubKey,TCHAR *ReValueName,int ReSetContent_D[256]);
int SetValue_B (struct HKEY__*ReRootKey,TCHAR *ReSubKey,TCHAR *ReValueName,BYTE ReSetContent_B[256]);
int DeleteKey (struct HKEY__*ReRootKey,TCHAR *ReSubKey,TCHAR *ReKeyName);
int DeleteValue (struct HKEY__*ReRootKey,TCHAR *ReSubKey,TCHAR *ReValueName);

二、查看函数

ShowContent (struct HKEY__*ReRootKey,TCHAR *ReSubKey,TCHAR *ReValueName)
{
	int i=0;	//操作结果:0==succeed
	if(RegOpenKeyEx(ReRootKey,ReSubKey,0,KEY_READ,&hKey)==ERROR_SUCCESS)
	{
		if(RegQueryValueEx(hKey,ReValueName,NULL,&dwType,(unsigned char *)content,&dwLength)!=ERROR_SUCCESS)
		{
			AfxMessageBox("错误:无法查询有关的注册表信息");
			i=1;
		}
		RegCloseKey(hKey);
	}
	else
	{
		AfxMessageBox("错误:无法打开有关的hKEY");
		i=1;
	}
	return i;
}

三、设置字符串值函数

SetValue_S (struct HKEY__*ReRootKey,TCHAR *ReSubKey,TCHAR *ReValueName,LPBYTE ReSetContent_S)
{
	int i=0;	//操作结果:0==succeed
	//int StrLength;
	//StrLength=CString(SetContent_S).GetLength();

	if(RegOpenKeyEx(ReRootKey,ReSubKey,0,KEY_WRITE,&hKey)==ERROR_SUCCESS)
	{
		if(RegSetValueEx(hKey,ReValueName,NULL,REG_SZ,ReSetContent_S,CString(SetContent_S).GetLength())!=ERROR_SUCCESS)
		{
			AfxMessageBox("错误:无法设置有关的注册表信息");
			i=1;
		}
		RegCloseKey(hKey);
	}
	else
	{
		AfxMessageBox("错误:无法查询有关的注册表信息");
		i=1;
	}
	return i;
}

四、设置DWORD值函数

SetValue_D (struct HKEY__*ReRootKey,TCHAR *ReSubKey,TCHAR *ReValueName,int ReSetContent_D[256])
{
	int i=0;	//操作结果:0==succeed
	if(RegOpenKeyEx(ReRootKey,ReSubKey,0,KEY_WRITE,&hKey)==ERROR_SUCCESS)
	{
		if(RegSetValueEx(hKey,ReValueName,NULL,REG_DWORD,(const unsigned char *)ReSetContent_D,4)!=ERROR_SUCCESS)
		{
			AfxMessageBox("错误:无法设置有关的注册表信息");
			i=1;
		}
		RegCloseKey(hKey);
	}
	else
	{
		AfxMessageBox("错误:无法查询有关的注册表信息");
		i=1;
	}
	return i;
}

五、设置二进制值函数

SetValue_B (struct HKEY__*ReRootKey,TCHAR *ReSubKey,TCHAR *ReValueName,BYTE ReSetContent_B[256])
{
	int i=0;	//操作结果:0==succeed
	if(RegOpenKeyEx(ReRootKey,ReSubKey,0,KEY_WRITE,&hKey)==ERROR_SUCCESS)
	{
		if(RegSetValueEx(hKey,ReValueName,NULL,REG_BINARY,(const unsigned char *)ReSetContent_B,4)!=ERROR_SUCCESS)
		{
			AfxMessageBox("错误:无法设置有关的注册表信息");
			i=1;
		}
		RegCloseKey(hKey);
	}
	else
	{
		AfxMessageBox("错误:无法查询有关的注册表信息");
		i=1;
	}
	return i;
}

六、删除子项函数

DeleteKey (struct HKEY__*ReRootKey,TCHAR *ReSubKey,TCHAR *ReKeyName)
{
	int i=0;	//操作结果:0==succeed
	if((RegOpenKeyEx(ReRootKey,ReSubKey,0,KEY_WRITE,&hKey))==ERROR_SUCCESS)
	{
		if((RegDeleteKey(hKey,ReKeyName))!=ERROR_SUCCESS)
		{
			//AfxMessageBox("清除指定项失败!");
			i=1;
		}
		RegCloseKey(hKey);
	}
	else
	{
		//AfxMessageBox("错误:无法打开有关的hKEY");
		i=1;
	}
	return i;
}


七、删除键值函数

DeleteValue (struct HKEY__*ReRootKey,TCHAR *ReSubKey,TCHAR *ReValueName)
{
	int i=0;	//操作结果:0==succeed
	if(RegOpenKeyEx(ReRootKey,ReSubKey,0,KEY_WRITE,&hKey)==ERROR_SUCCESS)
	{
		if(RegDeleteValue(hKey,ReValueName)!=ERROR_SUCCESS)
		{
			//AfxMessageBox("清除指定值失败!");
			i=1;
		}
		RegCloseKey(hKey);
	}
	else
	{
		//AfxMessageBox("错误:无法打开有关的hKEY");
		i=1;
	}
	return i;
}


八、调用方法

void CRegDemoDlg::OnSetValue_S() //例1所使用的代码:设置字符串值
{
	// TODO: Add your control notification handler code here

	RootKey=HKEY_CURRENT_USER;     //注册表主键名称
	SubKey="Software//Microsoft";  //欲打开注册表值的地址
	ValueName="例1";               //欲设置值的名称
	SetContent_S=LPBYTE("成功");   //值的内容
	
	if((SetValue_S(RootKey,SubKey,ValueName,SetContent_S))!=0)
		AfxMessageBox("操作失败!");
}

void CRegDemoDlg::OnSetContent_B() //例2所使用的代码:设置二进制值
{
	// TODO: Add your control notification handler code here

	RootKey=HKEY_CURRENT_USER;     //注册表主键名称
	SubKey="Software//Microsoft";  //欲打开注册表值的地址
	ValueName="例2";               //欲设置值的名称
	SetContent_B[0]=1;             //值的内容
	//SetContent_B[1]=0x1B;
	//SetContent_B[2]=0x2C;
	//SetContent_B[3]=0x3D;
	//SetContent_B[4]=0x4E;

	if((SetValue_B(RootKey,SubKey,ValueName,SetContent_B))!=0)
		AfxMessageBox("操作失败!");
}

void CRegDemoDlg::OnSetContent_D() //例3所使用的代码:设置DWORD值
{
	// TODO: Add your control notification handler code here

	RootKey=HKEY_CURRENT_USER;     //注册表主键名称
	SubKey="Software//Microsoft";  //欲打开注册表值的地址
	ValueName="例3";               //欲设置值的名称
	SetContent_D[0]=4294967295;             //值的内容

	if((SetValue_D(RootKey,SubKey,ValueName,SetContent_D))!=0)
		AfxMessageBox("操作失败!");
}

void CRegDemoDlg::OnDeleteValue_1() //例4所使用的代码
{
	// TODO: Add your control notification handler code here

	RootKey=HKEY_CURRENT_USER;     //注册表主键名称
	SubKey="Software//Microsoft";  //欲打开注册表值的地址
	ValueName="例1";               //欲设置值的名称

	if((DeleteValue (RootKey,SubKey,ValueName))!=0)
		AfxMessageBox("操作失败!");
}

void CRegDemoDlg::OnDeleteValue_2() //例4所使用的代码
{
	// TODO: Add your control notification handler code here

	RootKey=HKEY_CURRENT_USER;     //注册表主键名称
	SubKey="Software//Microsoft";  //欲打开注册表值的地址
	ValueName="例2";               //欲设置值的名称

	if((DeleteValue (RootKey,SubKey,ValueName))!=0)
		AfxMessageBox("操作失败!");
}

void CRegDemoDlg::OnDeleteValue_3() //例4所使用的代码
{
	// TODO: Add your control notification handler code here

	RootKey=HKEY_CURRENT_USER;     //注册表主键名称
	SubKey="Software//Microsoft";  //欲打开注册表值的地址
	ValueName="例3";               //欲设置值的名称

	if((DeleteValue (RootKey,SubKey,ValueName))!=0)
		AfxMessageBox("操作失败!");
}

void CRegDemoDlg::OnDeleteKey() //例5所使用的代码
{
	// TODO: Add your control notification handler code here

	RootKey=HKEY_CURRENT_USER;                                        //注册表主键名称
	SubKey="Software//Microsoft//Windows//CurrentVersion//Explorer";  //欲打开注册表值的地址
	KeyName="Doc Find Spec MRU";                                      //欲设置项的名称

	if((DeleteKey (RootKey,SubKey,KeyName))!=0)
		AfxMessageBox("操作失败!");
}

void CRegDemoDlg::OnShowContent() //例1中的[查看]
{
	// TODO: Add your control notification handler code here

	RootKey=HKEY_CURRENT_USER;     //注册表主键名称
	SubKey="Software//Microsoft";  //欲打开注册表值的地址
	ValueName="例1";               //欲设置值的名称

	if ((ShowContent(RootKey,SubKey,ValueName))==0)
		MessageBox(content,"本操作是利用ShowContent()函数完成的。");

参考推荐:

对注册表进行简单的操作

如何在VC++中使用注册表

分享到:
评论

相关推荐

    vc读写注册表操作.rar

    本示例"vc读写注册表操作.rar"是使用VC6.0编译器实现的一个简单项目,它展示了如何通过C++代码进行注册表的创建、读取和写入操作。 首先,我们来看一下注册表的基本结构。注册表主要包含以下几个主要部分: 1. HKEY...

    VC读写注册表

    主要讲述了vc中队注册表的读写操作,里面有具体的函数以及实现方法

    VC的简单读写注册表

    本文将详细讲解如何使用VC++通过API调用来实现注册表的读写操作。 首先,我们需要了解Windows API中的几个关键函数,它们用于对注册表进行读取、写入和查询: 1. **RegOpenKeyEx**:此函数用于打开已存在的注册表...

    读写注册表

    "读写注册表"这个话题涉及到如何通过编程接口(API)或专门的工具来对注册表进行读取、创建、修改和删除等操作。 首先,我们可以通过API函数来访问注册表。在Windows API中,有一些核心函数如`RegOpenKeyEx`用于...

    vc6读写注册表的两个工程源码.rar

    本资源提供了两个使用`VC6`进行读写注册表操作的工程源码,帮助开发者理解并掌握这一技术。 首先,让我们了解一下如何在`C++`中直接操作注册表。在Windows API中,`RegOpenKeyEx`函数用于打开已存在的注册表键,`...

    VC-读写 注册表+ini+xml

    接下来,我们将深入探讨“VC-读写 注册表+ini+xml”这个主题。 首先,我们来看注册表。注册表是Windows操作系统中的核心数据库,用于存储系统和应用程序的配置信息。在C++编程中,使用Visual C++(简称VC)可以方便...

    C++ 读取注册表VS2010demo

    在C++编程中,有时我们需要访问操作系统的注册表来获取或设置系统配置信息。这个“C++ 读取注册表VS2010 demo”是一个示例项目,它演示了如何在Visual Studio 2010环境下使用C++语言来读取Windows注册表。这个项目...

    VC 向注册表中写入软件信息.rar

    VC 向注册表中写入软件信息,一个成熟软件是不可能不操作注册表的,注册表是系统查找软件信息的数据库,如果操作这个数据库读写信息,或许你会从本VC 代码中找到答案。

    mfc 对话框托盘、气泡、读写注册表、控制鼠标键盘、定时器

    本程序适合vc初学者学习使用,软件实现鼠标位置的获取,屏幕大小的获取,鼠标指定位置单击,单击间隔和次数可以设置,定时器的使用,这是一个对话框程序,实现了托盘、气泡、读写注册表,系统热键的使用等等 在vc60...

    vc访问注册表类

    在Microsoft Visual C++ 6.0(简称VC6.0)环境下,开发Windows应用程序时,有时需要对系统注册表进行读写操作。注册表是Windows操作系统用来存储配置信息的重要数据库,包括软件设置、硬件配置等。`Registry.cpp` 和...

    VC注册表操作类

    在Windows操作系统中,注册表是存储系统和应用程序...总的来说,"VC注册表操作类"是VC++开发Windows应用程序时处理注册表信息的一个强大工具,它简化了注册表的读写操作,使得开发者能够更专注于应用程序的核心逻辑。

    vc注册表操作封装类

    总结起来,"vc注册表操作封装类"是一个方便VC++程序员操作Windows注册表的工具,它提供了丰富的接口来执行常见的读写、创建、删除操作,同时通过类的封装降低了操作复杂性和潜在风险。`Registry.cpp`和`Registry.h`...

    VC读写ini文件VC读写ini文件

    然而,随着软件技术的发展,现代的Windows应用程序更多地倾向于使用注册表(Registry)或XML文件来存储配置信息,因为它们提供了更强大的数据结构和安全特性。但了解如何在VC++中操作INI文件仍然对理解Windows编程...

    VC修改注册表设置环境变量的源码

    总之,通过VC++编程,我们可以方便地实现对Windows注册表的读写操作,进而设置和修改环境变量。这在软件部署、配置管理和自动化脚本中是非常常见的需求。在使用这些功能时,务必注意权限问题和错误处理,以确保程序...

    VC++读写文件和注册表的源程序

    摘要:VC/C++源码,文件操作,文件读写 VC++读文件、写文件与读注册表、写注册表的简单实例,代码中可展现出const char *与char * const的区别。C语言对文件读写的支持,FILE指针;文本文件和二进制文件的区别。用文本...

    VC HOOK注册表监控源码

    【VC HOOK注册表监控源码】是一种编程实践,它涉及到Windows系统中的API Hook技术和注册表监控技术。在Windows编程中,Hook是一种机制,允许程序员插入代码到系统调用链中,以便在特定事件发生时执行自定义操作或...

    一个封装注册表操作代码vc 类

    总的来说,这个"VC封装的注册表操作类"是针对Windows平台开发的一个实用工具,它使得VC++程序员在处理与注册表相关的任务时,能够更加高效、可靠。通过学习和使用此类,开发者可以更好地理解和控制系统的配置,从而...

    VC注册表编辑器源码

    这个"VC注册表编辑器源码"是一个专门针对Windows操作系统注册表进行读写操作的程序,对于学习Windows API调用、注册表操作以及VC++编程技巧具有很高的学习价值。 注册表是Windows系统的核心组成部分,存储着系统和...

    VC++读、写注册表

    总之,VC++读写注册表是软件开发中的常见需求,通过理解和应用提供的API或MFC类,开发者可以有效地管理应用程序的配置和状态。通过学习和实践资源中的源代码,你将能够熟练地在自己的项目中运用这些技术。

    操作注册表类,VC编写

    在Windows操作系统中,注册表是系统用来存储配置信息的关键数据库,包括硬件设备、软件应用程序、...通过这样的类,开发者可以更安全、高效地对注册表进行读写操作,从而实现对系统设置的管理和程序配置的持久化存储。

Global site tag (gtag.js) - Google Analytics