注册表是我们操作系统的一个数据库,它的结构同逻辑磁盘类似。 相信大家都用过了。  他有键,值!

 

上图就是我们计算机中的注册表!


现在我们来看API函数

1、打开关闭注册表

LONG WINAPI RegCreateKeyEx(
_In_ HKEY hKey, //指定父键的句柄
_In_ LPCTSTR lpSubKey, //要打开的子键名称,这个子键必须是hKey参数指定的子键
_Reserved_ DWORD Reserved, //保留,必须为0
_In_opt_ LPTSTR lpClass, //定义一个类名,一般为0
_In_ DWORD dwOptions, //创建子键的时候的选项
_In_ REGSAM samDesired, //指定子键的打开方式
_In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, //指定子键句柄的继承性
_Out_ PHKEY phkResult, //指向一个双字变量,用于返回创建或者打开的子键的句柄
_Out_opt_ LPDWORD lpdwDisposition //作为输入时指定子键不存在时,是否要创建子键,作为输出时返回值指定到底是创建了新建还是打开了存在的键,可以设为NULL
);


LONG WINAPI RegCloseKey(
_In_ HKEY hKey //指定父键的句柄
);


2、删除子键


LONG WINAPI RegDeleteKey(
_In_ HKEY hKey, //要删除的键的父键句柄
_In_ LPCTSTR lpSubKey //要删除的子键的名称
);


3、操作键值

LONG WINAPI RegSetValueEx(
_In_ HKEY hKey, //键值所在子键的子键句柄
_In_opt_ LPCTSTR lpValueName, //要设置的键值名称
_Reserved_ DWORD Reserved, //保留,必须为0
_In_ DWORD dwType, //要设置的键值的数据类型
_In_ const BYTE *lpData, //指向包含键值数据的缓冲区
_In_ DWORD cbData //lpData参数指向的缓冲区的长度
);


读取键值数据类型和数据内容

LONG WINAPI RegQueryValueEx(
_In_ HKEY hKey, //键值所在子键的子键句柄
_In_opt_ LPCTSTR lpValueName, //键值名称
_Reserved_ LPDWORD lpReserved, //保留,必须为0
_Out_opt_ LPDWORD lpType, //返回键值的数据类型
_Out_opt_ LPBYTE lpData, //返回键值的数据内容
_Inout_opt_ LPDWORD lpcbData //指定lpData参数指向的缓冲区的长度
);


删除键值函数

LONG WINAPI RegDeleteValue(
_In_ HKEY hKey, //键值所在的子键的子键句柄
_In_opt_ LPCTSTR lpValueName //要删除的键值的名称
);





写注册表之前,你必须先将目标子键打开,取得这个键对应的handle才可以!

BOOL SetRegValues(HKEY hKey, LPCTSTR lpSubKey, LPCTSTR lpValueName, DWORD dwBuf)
{
UpdateData(TRUE);//更新
HKEY hkey;
//打开或者创建子键
LONG hk = ::RegCreateKeyEx(hKey, lpSubKey, 0, NULL,
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL,
&hkey, NULL);
if(hk != ERROR_SUCCESS)//打开或者创建失败
{
MessageBox("很遗憾,创建/打开注册表失败~~~~~~~~~~~", "---");
return FALSE;
}else//打开或者创建成功
{
//设置键值的内容
LONG regs = RegSetValueEx(hkey, lpValueName, 0, REG_DWORD, (BYTE*)&dwBuf, sizeof(dwBuf));
if(regs != ERROR_SUCCESS)//设置失败
{
MessageBox("很遗憾,注册表值修改失败~~~~~~~~ ","---");
return FALSE;
}
}
//执行一个操作! 这里是cmd 更新一下!
ShellExecute(NULL, "open", "CMD.EXE/C gpupdate", NULL, NULL, SW_HIDE);
Sleep(1000);
//关闭注册表
RegCloseKey(hkey);
return TRUE;
}

上面的这段代码在写程序的时候可以直接用,封装函数!




















2012/8/19

jofranks 于南昌