贴出头文件: /******************************************************************** created: 2010/01/31 created: 31:1:2010 14:12 filename: f:/个人资料_ZWF/自己的源代码/TestFileList/TestFileList/FileList/MyRegister.h file path: f:/个人资料_ZWF/自己的源代码/TestFileList/TestFileList/FileList file base: MyRegister file ext: h author: zhangwf purpose: 封装与注册表相关的操作 *********************************************************************/ #ifndef _MY_REGISTER_ZWF_H_ #define _MY_REGISTER_ZWF_H_ // #include <vector> #include <string> using namespace std; typedef wstring MString; // 定义自己使用的类型(UNICODE下使用宽字符串) // // ===================================================================================== // 注册表相关的操作 // ===================================================================================== /******************************************************************** 函数名:RegMSetValue 作者:zhangwf 日期:2010/01/15 功能:设置注册表中一项值(数值) 参数:【输入】hKey 注册表根项. (例如:[HKEY_CLASSES_ROOT], [HKEY_CURRENT_USER], [HKEY_LOCAL_MACHINE], [HKEY_USERS]) 【输入】subKey 注册表子项. (例如:[ControlPanel/Volume]) 【输入】valueName 注册表键名字. (例如:[Mute]) 【输入】dwValue 注册表数据,无符号长整型. (例如:[7]) 返回:类型(BOOL) TRUE-成功;FALSE-失败; 修改记录: *********************************************************************/ BOOL RegMSetValue(HKEY hKey, const MString &subKey, const MString &valueName, DWORD dwValue); /******************************************************************** 函数名:RegMSetValue 作者:zhangwf 日期:2010/01/15 功能:设置注册表中一项值(字符串) 参数:【输入】hKey 注册表根项. (例如:[HKEY_CLASSES_ROOT], [HKEY_CURRENT_USER], [HKEY_LOCAL_MACHINE], [HKEY_USERS]) 【输入】subKey 注册表子项. (例如:[ControlPanel/Volume]) 【输入】valueName 注册表键名字. (例如:[Mute]) 【输入】strValue 注册表数据,字符串. (例如:[L"Chinese"]) 返回:类型(BOOL) TRUE-成功;FALSE-失败; 修改记录: *********************************************************************/ BOOL RegMSetValue(HKEY hKey, const MString &subKey, const MString &valueName, const MString &strValue); /******************************************************************** 函数名:RegMSetValue 作者:zhangwf 日期:2010/01/15 功能:设置注册表中一项值(字节数组) 参数:【输入】hKey 注册表根项. (例如:[HKEY_CLASSES_ROOT], [HKEY_CURRENT_USER], [HKEY_LOCAL_MACHINE], [HKEY_USERS]) 【输入】subKey 注册表子项. (例如:[ControlPanel/Volume]) 【输入】valueName 注册表键名字. (例如:[Mute]) 【输入】dwType 注册表数据类型 【输入】lpData 要设置的数据 【输入】cbData lpData的数据长度 返回:类型(BOOL) TRUE-成功;FALSE-失败; 修改记录: *********************************************************************/ BOOL RegMSetValue(HKEY hKey, const MString &subKey, const MString &valueName, DWORD dwType, const BYTE *lpData, DWORD cbData); /******************************************************************** 函数名:RegMGetValue 作者:zhangwf 日期:2010/01/15 功能:获得注册表项的值(无符号长整型) 参数:【输入】hKey 注册表根项. (例如:[HKEY_CLASSES_ROOT], [HKEY_CURRENT_USER], [HKEY_LOCAL_MACHINE], [HKEY_USERS]) 【输入】subKey 注册表子项. (例如:[ControlPanel/Volume]) 【输入】valueName 注册表键名字. (例如:[Mute]) 【输出】dwValue 读取到的键值 返回:类型(BOOL) TRUE-成功;FALSE-失败; 修改记录: *********************************************************************/ BOOL RegMGetValue(HKEY hKey, const MString &subKey, const MString &valueName, DWORD &dwValue); /******************************************************************** 函数名:RegMGetValue 作者:zhangwf 日期:2010/01/15 功能:获得注册表项的值(无符号长整型) 参数:【输入】hKey 注册表根项. (例如:[HKEY_CLASSES_ROOT], [HKEY_CURRENT_USER], [HKEY_LOCAL_MACHINE], [HKEY_USERS]) 【输入】subKey 注册表子项. (例如:[ControlPanel/Volume]) 【输入】valueName 注册表键名字. (例如:[Mute]) 【输出】strValue 读取到的键值(字符串) 返回:类型(BOOL) TRUE-成功;FALSE-失败; 修改记录: *********************************************************************/ BOOL RegMGetValue(HKEY hKey, const MString &subKey, const MString &valueName, MString &strValue); /******************************************************************** 函数名:RegMGetValue 作者:zhangwf 日期:2010/01/15 功能:获得注册表项的值(无符号长整型) 参数:【输入】hKey 注册表根项. (例如:[HKEY_CLASSES_ROOT], [HKEY_CURRENT_USER], [HKEY_LOCAL_MACHINE], [HKEY_USERS]) 【输入】subKey 注册表子项. (例如:[ControlPanel/Volume]) 【输入】valueName 注册表键名字. (例如:[Mute]) 【输入】lpType 键值的类型 【输出】lpData 存放读取到的键值(字节数组) 【输出】lpcbData 存放读取到的键值长度 返回:类型(BOOL) TRUE-成功;FALSE-失败; 修改记录: *********************************************************************/ BOOL RegMGetValue(HKEY hKey, const MString &subKey, const MString &valueName, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData); /******************************************************************** 函数名:RegMDeleteKey 作者:zhangwf 日期:2010/01/15 功能:删除注册表中的子项 参数:【输入】hKey 注册表根项. (例如:[HKEY_CLASSES_ROOT], [HKEY_CURRENT_USER], [HKEY_LOCAL_MACHINE], [HKEY_USERS]) 【输入】subKey 注册表子项. (例如:[ControlPanel/Volume]) 返回:类型(BOOL) TRUE-成功;FALSE-失败; 修改记录: *********************************************************************/ BOOL RegMDeleteKey(HKEY hKey, const MString &subKey); // // 定义存放所有键名及键值的结构 typedef struct _MY_REGKEY_VAL_ { _MY_REGKEY_VAL_() { Name = L""; Value = L""; } MString Name; MString Value; }MYKEYVAL; // 定义键信息数组 typedef vector<MYKEYVAL> CKeyValArray; /******************************************************************** 函数名:RegMGetAllKeyInfo 作者:zhangwf 日期:2010/03/30 功能:遍历一个键下的所有键值(只遍历一层) 参数:【输入】hKey 注册表根项. (例如:[HKEY_CLASSES_ROOT], [HKEY_CURRENT_USER], [HKEY_LOCAL_MACHINE], [HKEY_USERS]) 【输入】subKey 注册表子项. (例如:[ControlPanel/Volume]) 【输出】keyInfoArray 该子项下所有键信息数组. 返回:类型(BOOL) TRUE-成功;FALSE-失败; 修改记录: *********************************************************************/ BOOL RegMGetKeyValArray(HKEY hKey, const MString &subKey, CKeyValArray &keyInfoArray); // #endif 贴出源文件: /******************************************************************** created: 2010/01/31 created: 31:1:2010 14:13 filename: f:/个人资料_ZWF/自己的源代码/TestFileList/TestFileList/FileList/MyRegister.cpp file path: f:/个人资料_ZWF/自己的源代码/TestFileList/TestFileList/FileList file base: MyRegister file ext: cpp author: zhangwf purpose: 封装与注册表相关的操作 *********************************************************************/ // #include <Windows.h> #include "MyRegister.h" // // ======注册表相关操作函数实现=============================================================================================== /******************************************************************** 函数名:RegMSetValue 作者:zhangwf 日期:2010/01/15 功能:修改注册表中一项值(数值) 参数:【输入】hKey 注册表根项. (例如:[HKEY_CLASSES_ROOT], [HKEY_CURRENT_USER], [HKEY_LOCAL_MACHINE], [HKEY_USERS]) 【输入】subKey 注册表子项. (例如:[ControlPanel/Volume]) 【输入】valueName 注册表键名字. (例如:[Mute]) 【输入】dwValue 注册表数据,无符号长整型. (例如:[7]) 返回:类型(BOOL) TRUE-成功;FALSE-失败; 修改记录: *********************************************************************/ BOOL RegMSetValue(HKEY hKey, const MString &subKey, const MString &valueName, DWORD dwValue) { return RegMSetValue(hKey, subKey, valueName, REG_DWORD, (LPBYTE)&dwValue, sizeof(DWORD)); } /******************************************************************** 函数名:RegMSetValue 作者:zhangwf 日期:2010/01/15 功能:修改注册表中一项值(字符串) 参数:【输入】hKey 注册表根项. (例如:[HKEY_CLASSES_ROOT], [HKEY_CURRENT_USER], [HKEY_LOCAL_MACHINE], [HKEY_USERS]) 【输入】subKey 注册表子项. (例如:[ControlPanel/Volume]) 【输入】valueName 注册表键名字. (例如:[Mute]) 【输入】strValue 注册表数据,字符串. (例如:[L"Chinese"]) 返回:类型(BOOL) TRUE-成功;FALSE-失败; 修改记录: *********************************************************************/ BOOL RegMSetValue(HKEY hKey, const MString &subKey, const MString &valueName, const MString &strValue) { return RegMSetValue(hKey, subKey, valueName, REG_SZ, (LPBYTE)strValue.c_str(), strValue.length()*sizeof(TCHAR)); } /******************************************************************** 函数名:RegMSetValue 作者:zhangwf 日期:2010/01/15 功能:设置注册表中一项值(字节数组) 参数:【输入】hKey 注册表根项. (例如:[HKEY_CLASSES_ROOT], [HKEY_CURRENT_USER], [HKEY_LOCAL_MACHINE], [HKEY_USERS]) 【输入】subKey 注册表子项. (例如:[ControlPanel/Volume]) 【输入】valueName 注册表键名字. (例如:[Mute]) 【输入】dwType 注册表数据类型 【输入】lpData 要设置的数据 【输入】cbData lpData的数据长度 返回:类型(BOOL) TRUE-成功;FALSE-失败; 修改记录: *********************************************************************/ BOOL RegMSetValue(HKEY hKey, const MString &subKey, const MString &valueName, DWORD dwType, const BYTE *lpData, DWORD cbData) { HKEY hkResult; DWORD dwDisposition; // one of the following disposition values -> [REG_CREATED_NEW_KEY , REG_OPENED_EXISTING_KEY] // creates the specified registry key. If the key already exists, the function opens it. Note that key names are not case sensitive if(ERROR_SUCCESS != RegCreateKeyEx(hKey, subKey.c_str(), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_CREATE_SUB_KEY|KEY_SET_VALUE, NULL, &hkResult, &dwDisposition)) { return FALSE; } // sets the data and type of a specified value under a registry key if(ERROR_SUCCESS != RegSetValueEx(hkResult, valueName.c_str(), 0, dwType, lpData, cbData)) { RegCloseKey(hkResult); // releases a handle to the specified registry key return FALSE; } RegFlushKey(hkResult); // absolute certainty that registry changes are on disk RegCloseKey(hkResult); // releases a handle to the specified registry key return TRUE; } /******************************************************************** 函数名:RegMGetValue 作者:zhangwf 日期:2010/01/15 功能:获得注册表项的值(无符号长整型) 参数:【输入】hKey 注册表根项. (例如:[HKEY_CLASSES_ROOT], [HKEY_CURRENT_USER], [HKEY_LOCAL_MACHINE], [HKEY_USERS]) 【输入】subKey 注册表子项. (例如:[ControlPanel/Volume]) 【输入】valueName 注册表键名字. (例如:[Mute]) 【输出】dwValue 读取到的键值 返回:类型(BOOL) TRUE-成功;FALSE-失败; 修改记录: *********************************************************************/ BOOL RegMGetValue(HKEY hKey, const MString &subKey, const MString &valueName, DWORD &dwValue) { DWORD dwType; DWORD cbData = sizeof(DWORD); return RegMGetValue(hKey, subKey.c_str(), valueName.c_str(), &dwType, (LPBYTE)&dwValue, &cbData); } /******************************************************************** 函数名:RegMGetValue 作者:zhangwf 日期:2010/01/15 功能:获得注册表项的值(无符号长整型) 参数:【输入】hKey 注册表根项. (例如:[HKEY_CLASSES_ROOT], [HKEY_CURRENT_USER], [HKEY_LOCAL_MACHINE], [HKEY_USERS]) 【输入】subKey 注册表子项. (例如:[ControlPanel/Volume]) 【输入】valueName 注册表键名字. (例如:[Mute]) 【输出】strValue 读取到的键值(字符串) 返回:类型(BOOL) TRUE-成功;FALSE-失败; 修改记录: *********************************************************************/ BOOL RegMGetValue(HKEY hKey, const MString &subKey, const MString &valueName, MString &strValue) { // 临时存放取得的注册表键值 TCHAR resultValue[256]; memset(resultValue, 0, sizeof(resultValue)); DWORD dwType; DWORD dwReadLen = sizeof(resultValue); if(RegMGetValue(hKey, subKey.c_str(), valueName.c_str(), &dwType, (LPBYTE)resultValue, &dwReadLen) == FALSE) { return FALSE; } // 转换为字符串 strValue = MString(resultValue); return TRUE; } /******************************************************************** 函数名:RegMGetValue 作者:zhangwf 日期:2010/01/15 功能:获得注册表项的值(无符号长整型) 参数:【输入】hKey 注册表根项. (例如:[HKEY_CLASSES_ROOT], [HKEY_CURRENT_USER], [HKEY_LOCAL_MACHINE], [HKEY_USERS]) 【输入】subKey 注册表子项. (例如:[ControlPanel/Volume]) 【输入】valueName 注册表键名字. (例如:[Mute]) 【输入】lpType 键值的类型 【输出】lpData 存放读取到的键值(字节数组) 【输出】lpcbData 存放读取到的键值长度 返回:类型(BOOL) TRUE-成功;FALSE-失败; 修改记录: *********************************************************************/ BOOL RegMGetValue(HKEY hKey, const MString &subKey, const MString &valueName, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData) { HKEY hkResult; // opens the specified registry key. Note that key names are not case sensitive. if(ERROR_SUCCESS != RegOpenKeyEx(hKey, subKey.c_str(), 0, KEY_QUERY_VALUE, &hkResult)) { return FALSE; } // retrieves the type and data for a specified value name associated with an open registry key if(ERROR_SUCCESS != RegQueryValueEx(hkResult, valueName.c_str(), NULL, lpType, lpData, lpcbData)) { RegCloseKey(hkResult); // releases a handle to the specified registry key return FALSE; } RegCloseKey(hkResult); // releases a handle to the specified registry key return TRUE; } /******************************************************************** 函数名:RegMDeleteKey 作者:zhangwf 日期:2010/01/15 功能:删除注册表中的子项 参数:【输入】hKey 注册表根项. (例如:[HKEY_CLASSES_ROOT], [HKEY_CURRENT_USER], [HKEY_LOCAL_MACHINE], [HKEY_USERS]) 【输入】subKey 注册表子项. (例如:[ControlPanel/Volume]) 返回:类型(BOOL) TRUE-成功;FALSE-失败; 修改记录: *********************************************************************/ BOOL RegMDeleteKey(HKEY hKey, const MString &subKey) { if(ERROR_SUCCESS != RegDeleteKey(hKey, subKey.c_str())) { return FALSE; } return TRUE; } /******************************************************************** 函数名:RegMGetKeyValArray 作者:zhangwf 日期:2010/03/30 功能:遍历一个键下的所有键值(只遍历一层) 参数:【输入】hKey 注册表根项. (例如:[HKEY_CLASSES_ROOT], [HKEY_CURRENT_USER], [HKEY_LOCAL_MACHINE], [HKEY_USERS]) 【输入】subKey 注册表子项. (例如:[ControlPanel/Volume]) 【输出】keyInfoArray 该子项下所有键信息数组. 返回:类型(BOOL) TRUE-成功;FALSE-失败; 修改记录: *********************************************************************/ BOOL RegMGetKeyValArray(HKEY hKey, const MString &subKey, CKeyValArray &keyInfoArray) { // 清除上次内容 keyInfoArray.clear(); // 打开键项 HKEY hkResult; // opens the specified registry key. Note that key names are not case sensitive. if(ERROR_SUCCESS != RegOpenKeyEx(hKey, subKey.c_str(), 0, KEY_ALL_ACCESS, &hkResult)) { return FALSE; } // 存储临时信息 wchar_t wcValName[256]; wchar_t wcValue[256]; memset(wcValName, 0, sizeof(wcValName)); memset(wcValue, 0, sizeof(wcValue)); DWORD dwNameChars = 256; DWORD dwType=0; DWORD dwReadLen = sizeof(wcValue); // 遍历读取 MYKEYVAL keyVal; DWORD keyValIndex = 0; while (RegEnumValue(hkResult, keyValIndex, wcValName, &dwNameChars, NULL, &dwType, (LPBYTE)wcValue, &dwReadLen) == ERROR_SUCCESS) { // 获取键信息 keyVal.Name = MString(wcValName); keyVal.Value = MString(wcValue); keyInfoArray.push_back(keyVal); // 清除记录 memset(wcValName, 0, sizeof(wcValName)); memset(wcValue, 0, sizeof(wcValue)); dwNameChars = 256; dwReadLen = sizeof(wcValue); // 读取下一个 keyValIndex++; } RegCloseKey(hkResult); // releases a handle to the specified registry key return TRUE; }