一 写入和创建注册表: 很多软件都需要写入注册表,对电脑进行自启动等一些问题,下面我们对这个问题进行探讨。
我们这里用到的是以下两个函数。
函数: 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>
从上图中,我们可以看到,我们对开机自启动的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;
}