C/C++读写注册表中二进制数据(代码示例)

所属分类: 软件编程 / C 语言 阅读数: 119
收藏 0 赞 0 分享

1、RegOpenKeyEx 函数:

原形:

LONG RegOpenKeyEx(  
            HKEY hKey,     // 要打开主键名  
            LPCTSTR lpSubKey, // 需要打开的子键或路径  
            DWORD ulOptions,  // 保留,为0 
            REGSAM samDesired, // 操作权限标志  
            PHKEY phkResult  // 指向你打开键的句柄 (通过指针返回) 
      );  

  返回值:不成功返回非0,成功返回ERROR_SUCCESS.  
  解释:该函数负责打开指定的键或子键,如果不存在他不建立。

  查看微软官方文档:http://msdn.microsoft.com/zh-cn/aa912084

2、RegSetValueEx函数:

 原形:

LONG RegSetValueEx(  
            HKEY hKey,      // 已打开的键的句柄  
            LPCTSTR lpValueName, // 要查询值的名称,传如\"\"为查询键下的默认值  
            DWORD Reserved,   // 保留  
            DWORD dwType,    // 写入键值的类型  
            CONST BYTE *lpData, // 变量数据的地址  
            DWORD cbData     // 变量的长度  
      );  

 返回值:不成功返回非0,成功返回ERROR_SUCCESS  
 解释:设置某子键下特定名称的值。

查看微软官方文档:http://msdn.microsoft.com/zh-cn/aa916717#

3、RegQueryValueEx函数:

原形:

LONG RegQueryValueEx(  
            HKEY hKey,      // 已打开的键的句柄  
            LPTSTR lpValueName, // 要查询值的名称,传如\"\"为查询键下的默认值  
            LPDWORD lpReserved, // 保留,为0  
            LPDWORD lpType,   // 查询的类型  
            LPBYTE lpData,    // 数据存放的地址  
            LPDWORD lpcbData   // 数据长度+1  
      );  

  返回值:不成功返回非0,成功返回ERROR_SUCCESS  
  解释:读取某子键下特定名称的值。

  查看微软官方文档:http://msdn.microsoft.com/zh-cn/aa914692

写入二进制数据代码示例:

# include <windows.h>
# include <tchar.h>
 
int main(void)
{
	HKEY hKey;
	HKEY rootKey = HKEY_CURRENT_USER;
	TCHAR * subKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer"
					 "\\MenuOrder\\Start Menu2\\Programs\\test";
	TCHAR * keyValue = "c:\\test.exe";
	long openReg;
	long setRegValue;
	DWORD dwType = REG_BINARY;
	BYTE value[256] = "c:\\test.exe";
	openReg = RegOpenKeyEx(rootKey, subKey, 0, KEY_WRITE, &hKey);
	if (openReg == ERROR_SUCCESS)
	{
		setRegValue = RegSetValueEx(hKey, _T("order"), 0, dwType, value, 256);
		if (setRegValue == ERROR_SUCCESS)
		{
			MessageBox(NULL, _T("Write Sucess"), _T("call"), MB_OK);
		}
		else
		{
			MessageBox(NULL, _T("Write Fail"), _T("call"), MB_OK);
		}
		RegCloseKey(hKey);
	}
	return 0;
}

读取二进制数据的代码示例:

# include <windows.h>
# include <tchar.h>
 
int main(void)
{
	HKEY hKey;
	HKEY rootKey = HKEY_CURRENT_USER;
	TCHAR * subKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer"
					 "\\MenuOrder\\Start Menu2\\Programs\\test";
	long openRegResult;
	long readRegResult;
	DWORD dwType = REG_BINARY;
	REGSAM mode = KEY_READ;
	BYTE value[256] = {0};
	DWORD length = 256;
	openRegResult = RegOpenKeyEx(rootKey, subKey, 0, mode, &hKey);
	if (ERROR_SUCCESS == openRegResult)
	{
		readRegResult = RegQueryValueEx(hKey, _T("order"), 0, &dwType, value, &length);
		if (ERROR_SUCCESS == readRegResult)
		{
			MessageBox(NULL, _T(value), _T("call"), MB_OK);
		}
		else
		{
			MessageBox(NULL, _T("ERROR"), _T("call"), MB_OK);	
		}
	}
	RegCloseKey(hKey);
	return 0;
}

注:读写其他类型的注册表键值与上述的类似,不单独讲解了。

更多精彩内容其他人还在看

用标准c++实现string与各种类型之间的转换

这个类在头文件中定义, < sstream>库定义了三种类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作。另外,每个类都有一个对应的宽字符集版本
收藏 0 赞 0 分享

C++如何通过ostringstream实现任意类型转string

再使用整型转string的时候感觉有点棘手,因为itoa不是标准C里面的,而且即便是有itoa,其他类型转string不是很方便。后来去网上找了一下,发现有一个好方法
收藏 0 赞 0 分享

C/C++指针小结

要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区
收藏 0 赞 0 分享

C++ 类的静态成员深入解析

在C++中类的静态成员变量和静态成员函数是个容易出错的地方,本文先通过几个例子来总结静态成员变量和成员函数使用规则,再给出一个实例来加深印象
收藏 0 赞 0 分享

C++类的静态成员初始化详细讲解

通常静态数据成员在类声明中声明,在包含类方法的文件中初始化.初始化时使用作用域操作符来指出静态成员所属的类.但如果静态成员是整型或是枚举型const,则可以在类声明中初始化
收藏 0 赞 0 分享

C++类静态成员与类静态成员函数详解

静态成员不可在类体内进行赋值,因为它是被所有该类的对象所共享的。你在一个对象里给它赋值,其他对象里的该成员也会发生变化。为了避免混乱,所以不可在类体内进行赋值
收藏 0 赞 0 分享

C++中的friend友元函数详细解析

友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类。友元函数的特点是能够访问类中的私有成员的非成员函数。友元函数从语法上看,它与普通函数一样,即在定义上和调用上与普通函数一样
收藏 0 赞 0 分享

static全局变量与普通的全局变量的区别详细解析

以下是对static全局变量与普通的全局变量的区别进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助
收藏 0 赞 0 分享

C++ explicit关键字的应用方法详细讲解

C++ explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢?下面就让我们一起来看看这方面的知识吧
收藏 0 赞 0 分享

教你5分钟轻松搞定内存字节对齐

随便google一下,人家就可以跟你解释的,一大堆的道理,我们没怎么多时间,讨论为何要对齐.直入主题,怎么判断内存对齐规则,sizeof的结果怎么来的,请牢记以下3条原则
收藏 0 赞 0 分享
查看更多