读写注册表C++

时间:2022-06-12 06:37:00

一   写入和创建注册表:    很多软件都需要写入注册表,对电脑进行自启动等一些问题,下面我们对这个问题进行探讨。

我们这里用到的是以下两个函数。

     函数: RegCreateKey   RegSetValueEx


常用函数

(1) 打开一个键的函数:

1RegOpenKeyEx

函数定义:LONG RegOpenKeyEx(HKEY hKey,//已经打开的键的句柄,或者直接是上述几个根键

                              LPCTSTR lpSubKey,//要打开的子键名字的地址

                              DWORD ulOptions,//保留值,必须为0

                              REGSAM samDesired,//打开方式,如读还是写

                              PHKEY phkResult//返回的打开的子键的句柄

                               );

2RegOpenKey 这个函数与Windows 3.1兼容。基于Win32的应用程序应该使用RegOpenKeyEx函数。

LONG RegOpenKey(HKEY hKey,        // 要打开键的句柄
                     LPCTSTR lpSubKey, // 要打开子键的名字的地址
                     PHKEY phkResult   // 要打开键的句柄的地址
                     );

注意:RegOpenKey这个函数与Windows 3.1兼容。基于Win32的应用程序应该使用RegOpenKeyEx函数。

(2)查询某一个键值:RegQueryValueEx

    函数定义:LONG RegQueryValueEx(HKEY hKey,//要查询的键的句柄

                                   LPCTSTR lpValueName,//要查询的键值的名称

                                   LPDWORD lpReserved,//保留值

                                   LPDWORD lpType,//要查询的数据的类型

                                   LPBYTE lpData,//要返回的查询的数据

                                   LPDWORD lpcbData//预置的数据的长度

                                  );

(3)设置一个键值RegSetValueEx
    函数定义:LONG RegSetValueEx(HKEY hKey,//要设置的键的句柄
                                 LPCTSTR lpValueName,//要访问的键值的名称
                                 LPDWORD lpReserved,//保留值
                                 DWORD dwType,//要设置的数据的类型
                                 const BYTE *lpData,//要设置的健值
                                 DWORD cbData//数据的长度
                                );
(4)新建指定键RegCreateKey
函数定义:LONG RegCreateKey (HKEY  hkey, // 要打开键的句柄
LPCTSTR lpsubkey, // 要打开子键的名字的地址
PHKEY phkresult // 已打开句柄的缓存区的地址
);



#include "stdio.h"
#include <windows.h>
int main()
{
char regname[] = "Software\\Microsoft\\Windows\\CurrentVersion\\Run\\MyRegedit";
HKEY hkResult;
RegCreateKey(HKEY_LOCAL_MACHINE,regname,&hkResult);//创建注册表
RegSetValueEx(hkResult,"door",0,REG_EXPAND_SZ,(unsigned char*)"xiaoge",strlen("xiaoge"));//写注册表
RegCloseKey(hkResult);//一定要记得关上注册表
system("pause");
return 0;
}</span>



读写注册表C++


从上图中,我们可以看到,我们对开机自启动的Run文件里创建了MyRegedit 文件夹,还写入了一个名称为door,数据类型为REG_EXPAND_SZ,数据为xiaoge 的注册表。

注:在windows xp 系统写运行的。

二 读注册表

我们有时候可以对程序里的注册表进行读。


#include "stdio.h"
#include <windows.h>
int main()
{
char regname[] = "Software\\Microsoft\\Windows\\CurrentVersion\\Run\\MyRegedit";
HKEY hkResult ;
TCHAR tchData[64];

DWORD dwSize = sizeof(tchData);
DWORD dwType = REG_EXPAND_SZ;


RegOpenKey(HKEY_LOCAL_MACHINE,regname,&hkResult);//打开注册表
RegQueryValueEx(hkResult,"door",0,&dwType,(LPBYTE)tchData,&dwSize);//读里面的数据

printf("%s",tchData);
system("pause");
return 0;
}