如何通过CC++代码实现读写注册表中的二进制数据?
- 内容介绍
- 文章标签
- 相关推荐
本文共计737个文字,预计阅读时间需要3分钟。
RegOpenKeyEx 函数用于打开指定的注册表键。以下是简化后的内容:
plaintext
1.RegOpenKeyEx 函数:
1、RegOpenKeyEx 函数:
原形:
LONGRegOpenKeyEx(
HKEYhKey,//要打开主键名
LPCTSTRlpSubKey,// 需要打开的子键或路径
DWORDulOptions,//保留,为0
REGSAMsamDesired,//操作权限标志
PHKEYphkResult//指向你打开键的句柄 (通过指针返回)
);
返回值:不成功返回非0,成功返回ERROR_SUCCESS.
解释:该函数负责打开指定的键或子键,如果不存在他不建立。
查看微软官方文档:msdn.microsoft.com/zh-cn/aa912084
2、RegSetValueEx函数:
原形:
LONGRegSetValueEx(
HKEYhKey,//已打开的键的句柄
LPCTSTRlpValueName,//要查询值的名称,传如\"\"为查询键下的默认值
DWORDReserved,//保留
DWORDdwType,//写入键值的类型
CONSTBYTE*lpData,//变量数据的地址
DWORDcbData//变量的长度
);
返回值:不成功返回非0,成功返回ERROR_SUCCESS
解释:设置某子键下特定名称的值。
查看微软官方文档:msdn.microsoft.com/zh-cn/aa916717#
3、RegQueryValueEx函数:
原形:
LONGRegQueryValueEx(
HKEYhKey,//已打开的键的句柄
LPTSTRlpValueName,//要查询值的名称,传如\"\"为查询键下的默认值
LPDWORDlpReserved,//保留,为0
LPDWORDlpType,//查询的类型
LPBYTElpData,//数据存放的地址
LPDWORDlpcbData//数据长度+1
);
返回值:不成功返回非0,成功返回ERROR_SUCCESS
解释:读取某子键下特定名称的值。
查看微软官方文档:msdn.microsoft.com/zh-cn/aa914692
写入二进制数据代码示例:
# include <windows.h> # include <tchar.h> int main(void) { HKEY hKey; HKEY rootKey = HKEY_CURRENT_USER; TCHAR * subKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer" "\\MenuOrder\\Start Menu2\\Programs\\test"; TCHAR * keyValue = "c:\\test.exe"; long openReg; long setRegValue; DWORD dwType = REG_BINARY; BYTE value[256] = "c:\\test.exe"; openReg = RegOpenKeyEx(rootKey, subKey, 0, KEY_WRITE, &hKey); if (openReg == ERROR_SUCCESS) { setRegValue = RegSetValueEx(hKey, _T("order"), 0, dwType, value, 256); if (setRegValue == ERROR_SUCCESS) { MessageBox(NULL, _T("Write Sucess"), _T("call"), MB_OK); } else { MessageBox(NULL, _T("Write Fail"), _T("call"), MB_OK); } RegCloseKey(hKey); } return 0; }
读取二进制数据的代码示例:
# include <windows.h> # include <tchar.h> int main(void) { HKEY hKey; HKEY rootKey = HKEY_CURRENT_USER; TCHAR * subKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer" "\\MenuOrder\\Start Menu2\\Programs\\test"; long openRegResult; long readRegResult; DWORD dwType = REG_BINARY; REGSAM mode = KEY_READ; BYTE value[256] = {0}; DWORD length = 256; openRegResult = RegOpenKeyEx(rootKey, subKey, 0, mode, &hKey); if (ERROR_SUCCESS == openRegResult) { readRegResult = RegQueryValueEx(hKey, _T("order"), 0, &dwType, value, &length); if (ERROR_SUCCESS == readRegResult) { MessageBox(NULL, _T(value), _T("call"), MB_OK); } else { MessageBox(NULL, _T("ERROR"), _T("call"), MB_OK); } } RegCloseKey(hKey); return 0; }
注:读写其他类型的注册表键值与上述的类似,不单独讲解了。
本文共计737个文字,预计阅读时间需要3分钟。
RegOpenKeyEx 函数用于打开指定的注册表键。以下是简化后的内容:
plaintext
1.RegOpenKeyEx 函数:
1、RegOpenKeyEx 函数:
原形:
LONGRegOpenKeyEx(
HKEYhKey,//要打开主键名
LPCTSTRlpSubKey,// 需要打开的子键或路径
DWORDulOptions,//保留,为0
REGSAMsamDesired,//操作权限标志
PHKEYphkResult//指向你打开键的句柄 (通过指针返回)
);
返回值:不成功返回非0,成功返回ERROR_SUCCESS.
解释:该函数负责打开指定的键或子键,如果不存在他不建立。
查看微软官方文档:msdn.microsoft.com/zh-cn/aa912084
2、RegSetValueEx函数:
原形:
LONGRegSetValueEx(
HKEYhKey,//已打开的键的句柄
LPCTSTRlpValueName,//要查询值的名称,传如\"\"为查询键下的默认值
DWORDReserved,//保留
DWORDdwType,//写入键值的类型
CONSTBYTE*lpData,//变量数据的地址
DWORDcbData//变量的长度
);
返回值:不成功返回非0,成功返回ERROR_SUCCESS
解释:设置某子键下特定名称的值。
查看微软官方文档:msdn.microsoft.com/zh-cn/aa916717#
3、RegQueryValueEx函数:
原形:
LONGRegQueryValueEx(
HKEYhKey,//已打开的键的句柄
LPTSTRlpValueName,//要查询值的名称,传如\"\"为查询键下的默认值
LPDWORDlpReserved,//保留,为0
LPDWORDlpType,//查询的类型
LPBYTElpData,//数据存放的地址
LPDWORDlpcbData//数据长度+1
);
返回值:不成功返回非0,成功返回ERROR_SUCCESS
解释:读取某子键下特定名称的值。
查看微软官方文档:msdn.microsoft.com/zh-cn/aa914692
写入二进制数据代码示例:
# include <windows.h> # include <tchar.h> int main(void) { HKEY hKey; HKEY rootKey = HKEY_CURRENT_USER; TCHAR * subKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer" "\\MenuOrder\\Start Menu2\\Programs\\test"; TCHAR * keyValue = "c:\\test.exe"; long openReg; long setRegValue; DWORD dwType = REG_BINARY; BYTE value[256] = "c:\\test.exe"; openReg = RegOpenKeyEx(rootKey, subKey, 0, KEY_WRITE, &hKey); if (openReg == ERROR_SUCCESS) { setRegValue = RegSetValueEx(hKey, _T("order"), 0, dwType, value, 256); if (setRegValue == ERROR_SUCCESS) { MessageBox(NULL, _T("Write Sucess"), _T("call"), MB_OK); } else { MessageBox(NULL, _T("Write Fail"), _T("call"), MB_OK); } RegCloseKey(hKey); } return 0; }
读取二进制数据的代码示例:
# include <windows.h> # include <tchar.h> int main(void) { HKEY hKey; HKEY rootKey = HKEY_CURRENT_USER; TCHAR * subKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer" "\\MenuOrder\\Start Menu2\\Programs\\test"; long openRegResult; long readRegResult; DWORD dwType = REG_BINARY; REGSAM mode = KEY_READ; BYTE value[256] = {0}; DWORD length = 256; openRegResult = RegOpenKeyEx(rootKey, subKey, 0, mode, &hKey); if (ERROR_SUCCESS == openRegResult) { readRegResult = RegQueryValueEx(hKey, _T("order"), 0, &dwType, value, &length); if (ERROR_SUCCESS == readRegResult) { MessageBox(NULL, _T(value), _T("call"), MB_OK); } else { MessageBox(NULL, _T("ERROR"), _T("call"), MB_OK); } } RegCloseKey(hKey); return 0; }
注:读写其他类型的注册表键值与上述的类似,不单独讲解了。

