【VC++积累】之三、操作注册表
注册表是我们操作系统的一个数据库,它的结构同逻辑磁盘类似。 相信大家都用过了。 他有键,值!
上图就是我们计算机中的注册表!
现在我们来看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 于南昌