Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /www/wwwroot/fawdlstty.com/wp-content/plugins/wp-syntax/wp-syntax.php on line 383
注册表这东西用的越来越少了,但在特定场合还是不可替代的东西。比如开机启动项、环境变量和文件扩展名等各种系统信息都是放在注册表中。
由于注册表API访问稍微麻烦了点,于是我对其进行简单的封装。代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | #pragma once #ifndef __HREG_HPP__ #define __HREG_HPP__ #include <Windows.h> // main_key 注册表根键可取值 // HKEY_CLASSES_ROOT // HKEY_CURRENT_CONFIG // HKEY_CURRENT_USER // HKEY_LOCAL_MACHINE // HKEY_USERS // type 键值类型可取值 // REG_BINARY 二进制数据 // REG_DWORD 双字 // REG_DWORD_LITTLE_ENDIAN 双字小头模式 // REG_DWORD_BIG_ENDIAN 双字大头模式 // REG_EXPAND_SZ 包含未展开的环境变量的引用的字串 // REG_LINK 一个用 RegCreateKeyEx 传 REG_OPTION_CREATE_LINK 创建的符号链接的字串 // REG_MULTI_SZ 多个字符串,用\0分隔,末尾为\0\0 // REG_NONE 没定义值类型 // REG_QWORD 四字 // REG_QWORD_LITTLE_ENDIAN 四字小头模式 // REG_SZ 普通字符串 class hReg { //不可实例化 hReg () = delete; ~hReg () = delete; hReg (hReg&) = delete; public: //创建注册表路径 //main_key: 注册表根键 //sub_key: 注册表路径 //type: 键值类型 //value: 值 //value_size: 值长度(字节) static BOOL set_path (HKEY main_key, LPCTSTR sub_key, DWORD type, LPBYTE value, DWORD value_size) { return ERROR_SUCCESS == ::RegSetValueEx (main_key, sub_key, 0, type, value, value_size); } //创建注册表键值 //main_key: 注册表根键 //sub_key: 注册表路径 //sub_key2: 键值名称 //type: 键值类型 //value: 值 //value_size: 值长度(字节) static BOOL set_key (HKEY main_key, LPCTSTR sub_key, LPCTSTR sub_key2, DWORD type, LPBYTE value, DWORD value_size) { HKEY hKey; if (ERROR_SUCCESS != ::RegOpenKeyEx (main_key, sub_key, 0, KEY_WRITE, &hKey)) return FALSE; BOOL bRet = ERROR_SUCCESS == ::RegSetValueEx (hKey, sub_key2, 0, type, value, value_size); ::RegCloseKey (hKey); return bRet; } //获取注册表路径键值 //main_key: 注册表根键 //sub_key: 注册表路径 //value: 值 //value_size: 值长度(字节) static BOOL get_path_value (HKEY main_key, LPCTSTR sub_key, LPBYTE value, DWORD &value_size) { return ERROR_SUCCESS == ::RegQueryValueEx (main_key, sub_key, NULL, NULL, value, &value_size); } //获取注册表路径键值 //main_key: 注册表根键 //sub_key: 注册表路径 //sub_key2: 键值名称 //value: 值 //value_size: 值长度(字节) static BOOL get_key_value (HKEY main_key, LPCTSTR sub_key, LPCTSTR sub_key2, LPBYTE value, DWORD &value_size) { HKEY hKey; if (ERROR_SUCCESS != ::RegOpenKeyEx (main_key, sub_key, 0, KEY_READ, &hKey)) return FALSE; BOOL bRet = ERROR_SUCCESS == ::RegQueryValueEx (hKey, sub_key2, NULL, NULL, value, &value_size); ::RegCloseKey (hKey); return bRet; } //删除注册表路径 //main_key: 注册表根键 //sub_key: 注册表路径 static BOOL delete_path (HKEY main_key, LPCTSTR sub_key) { return ERROR_SUCCESS == ::RegDeleteKey (main_key, sub_key); } //删除注册表键值 //main_key: 注册表根键 //sub_key: 注册表路径 //sub_key2: 注册表路径 static BOOL delete_key (HKEY main_key, LPCTSTR sub_key, LPCTSTR sub_key2) { HKEY hKey; if (ERROR_SUCCESS != ::RegOpenKeyEx (main_key, sub_key, 0, KEY_ALL_ACCESS, &hKey)) return FALSE; BOOL bRet = ERROR_SUCCESS == ::RegDeleteKey (hKey, sub_key2); ::RegCloseKey (hKey); return bRet; } }; #endif //__HREG_HPP__ |
全部为静态函数,注上了比较完整的注释,另外函数名也较之前清晰,统一返回BOOL表示执行成功或失败。