-
打开或创建注册表项:
- 使用
RegCreateKeyEx打开或创建指定的注册表项。
- 使用
-
设置注册表值:
- 使用
RegSetValueEx设置一个字符串值(REG_SZ)。
- 使用
-
读取注册表值:
- 使用
RegGetValue读取之前设置的值,并将其存储到缓冲区。
- 使用
-
删除注册表值:
- 使用
RegDeleteValue删除指定的注册表值。
- 使用
-
关闭注册表项:
- 使用
RegCloseKey关闭打开的注册表项。
- 使用
-
枚举注册表子项:
-
使用
RegEnumKeyEx来遍历指定注册表项的所有子项。 -
对于每个子项,使用
RegOpenKeyEx打开它,然后使用RegEnumValue遍历该子项的所有值
-
示例代码:
#include <windows.h>
#include <iostream>
void EnumerateRegistryKey(HKEY hKey) {
DWORD index = 0;
WCHAR subKeyName[256];
DWORD subKeyNameSize = sizeof(subKeyName) / sizeof(subKeyName[0]);
// 遍历所有子项
while (RegEnumKeyEx(hKey, index, subKeyName, &subKeyNameSize, NULL, NULL, NULL, NULL) == ERROR_SUCCESS) {
std::wcout << L"Subkey: " << subKeyName << std::endl;
// 打开子项
HKEY hSubKey;
if (RegOpenKeyEx(hKey, subKeyName, 0, KEY_READ, &hSubKey) == ERROR_SUCCESS) {
// 遍历子项的值
DWORD valueIndex = 0;
WCHAR valueName[256];
DWORD valueNameSize = sizeof(valueName) / sizeof(valueName[0]);
BYTE valueData[256];
DWORD valueDataSize = sizeof(valueData);
while (RegEnumValue(hSubKey, valueIndex, valueName, &valueNameSize, NULL, NULL, valueData, &valueDataSize) == ERROR_SUCCESS) {
std::wcout << L" Value Name: " << valueName << L", Value Data: " << (WCHAR*)valueData << std::endl;
valueIndex++;
valueNameSize = sizeof(valueName) / sizeof(valueName[0]);
valueDataSize = sizeof(valueData);
}
RegCloseKey(hSubKey);
}
index++;
subKeyNameSize = sizeof(subKeyName) / sizeof(subKeyName[0]);
}
}
int main() {
HKEY hKey;
const wchar_t* subKey = L"SOFTWARE\\MyExampleApp";
const wchar_t* valueName = L"MyValue";
const wchar_t* valueData = L"Hello, Registry!";
// 创建或打开注册表项
if (RegCreateKeyEx(HKEY_CURRENT_USER, subKey, 0, NULL, 0, KEY_WRITE | KEY_READ, NULL, &hKey, NULL) != ERROR_SUCCESS) {
std::cerr << "Failed to create or open registry key." << std::endl;
return 1;
}
// 设置注册表值
if (RegSetValueEx(hKey, valueName, 0, REG_SZ, (const BYTE*)valueData, (wcslen(valueData) + 1) * sizeof(wchar_t)) != ERROR_SUCCESS) {
std::cerr << "Failed to set registry value." << std::endl;
RegCloseKey(hKey);
return 1;
}
// 读取注册表值
wchar_t buffer[256];
DWORD bufferSize = sizeof(buffer);
if (RegGetValue(hKey, NULL, valueName, RRF_RT_REG_SZ, NULL, buffer, &bufferSize) == ERROR_SUCCESS) {
std::wcout << L"Value from registry: " << buffer << std::endl;
} else {
std::cerr << "Failed to get registry value." << std::endl;
}
// 遍历注册表项的所有子项和它们的值
std::wcout << L"Enumerating registry keys and values..." << std::endl;
EnumerateRegistryKey(hKey);
// 删除注册表值
if (RegDeleteValue(hKey, valueName) != ERROR_SUCCESS) {
std::cerr << "Failed to delete registry value." << std::endl;
}
// 关闭注册表项
RegCloseKey(hKey);
return 0;
}