C++类实现Windows注册表操作

Windows操作系统中,注册表是一个关键的数据存储,它包含了系统和应用程序的配置信息。然而,直接操作注册表可能会非常复杂和繁琐。为了简化这一过程,创建了一个名为RKEY的C++类,它可以方便地进行注册表的查询、设置和删除操作。

RKEY类提供了构造函数、赋值运算符和析构函数,支持从现有的HKEY或RKEY对象创建实例,也可以通过指定根键和子键来创建。此外,它还支持移动语义和复制构造函数。

以下是RKEY类的基本使用方法:

// 创建一个RKEY实例 RKEY r(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Run"); // 查询值 string str = r[L"OneDrive"]; // str = "C:\\...\\OneDrive.exe" /background DWORD some_dword = r[L"blahblah"]; // 内部调用RegQueryValueEx并复制值到DWORD vector subs = r.EnumSubKeys(); vector allvalues = r.EnumValues();

RKEY::operator[]用于从RKEY获取VALUE,可以用于值的操纵。如果不确定值的类型,可以先使用EnumValues()枚举所有值,然后使用成员name, value, ty访问名称、类型和数据。

以下是设置或删除值的示例:

// 设置值 r[L"OneDrive"] = L"c:\\dos\\format.exe c: /u /norecovery /permanent /nowarnings /destroy /lowlevel"; // 删除单个子键 bool result = r.DeleteSingle(L"OneDrive"); // 删除整个子键 result = r.Delete();

RKEY类还提供了完整的代码实现,包括VALUE类的定义和RKEY类的各种成员函数。VALUE类用于存储注册表值的名称、数据和类型。RKEY类提供了Load、Open、Close和Valid等成员函数,用于加载、打开、关闭注册表键和检查键的有效性。

以下是RKEY类的完整代码:

class RKEY { private: HKEY k = 0; public: class VALUE { public: std::wstring name; vector value; HKEY k = 0; mutable DWORD ty = 0; VALUE(const wchar_t* s, HKEY kk) { if (s) name = s; k = kk; } // ... 省略部分代码 ... }; RKEY() { k = 0; } // ... 省略部分代码 ... ~RKEY() { Close(); } // ... 省略部分代码 ... };
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485