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