NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
system/registry.hpp
浏览该文件的文档.
1#ifndef NEFORCE_CORE_SYSTEM_REGISTRY_HPP__
2#define NEFORCE_CORE_SYSTEM_REGISTRY_HPP__
3
11
13#ifdef NEFORCE_PLATFORM_WINDOWS
16# include <windef.h>
17# include <winreg.h>
18NEFORCE_BEGIN_NAMESPACE__
19
25
30struct registry_key_exception final : system_exception {
37 explicit registry_key_exception(const char* info = "Registry Key Operation Failed.", const char* type = static_type,
38 const int code = 0) noexcept :
39 system_exception(info, type, code) {}
40
41 explicit registry_key_exception(const exception& e) :
43
44 ~registry_key_exception() override = default;
45 static constexpr auto static_type = "registry_key_exception";
46};
47 // Exceptions
49
55
62class NEFORCE_API registry_key {
63public:
68 struct root_key {
73 static ::HKEY classes_root() noexcept { return HKEY_CLASSES_ROOT; }
74
79 static ::HKEY current_user() noexcept { return HKEY_CURRENT_USER; }
80
85 static ::HKEY local_machine() noexcept { return HKEY_LOCAL_MACHINE; }
86
91 static ::HKEY users() noexcept { return HKEY_USERS; }
92
97 static ::HKEY current_config() noexcept { return HKEY_CURRENT_CONFIG; }
98 };
99
106 enum class value_type : ::DWORD {
107 none = REG_NONE,
108 string = REG_SZ,
109 expand_string = REG_EXPAND_SZ,
110 binary = REG_BINARY,
111 dword = REG_DWORD,
112 qword = REG_QWORD,
113 multi_string = REG_MULTI_SZ
114 };
115
120 struct NEFORCE_API value_info {
124
130 NEFORCE_NODISCARD wstring to_string() const;
131
136 NEFORCE_NODISCARD ::DWORD to_dword() const noexcept;
137
142 NEFORCE_NODISCARD ::ULONGLONG to_qword() const noexcept;
143
149 NEFORCE_NODISCARD vector<wstring> to_multi_string() const;
150 };
151
152private:
153 ::HKEY hkey_ = nullptr;
154 bool owns_handle_ = false;
155
156 void close() noexcept;
157 void throw_if_invalid() const;
158 NEFORCE_NODISCARD value_info get_value_info(const wstring& name) const;
159
160public:
166 registry_key() = default;
167
174 explicit registry_key(::HKEY key);
175
182
183 registry_key(const registry_key&) = delete;
184 registry_key& operator=(const registry_key&) = delete;
185
190 registry_key(registry_key&& other) noexcept;
191
197 registry_key& operator=(registry_key&& other) noexcept;
198
203 NEFORCE_NODISCARD bool is_valid() const noexcept { return hkey_ != nullptr; }
204
209 explicit operator bool() const noexcept { return is_valid(); }
210
219
229 void open(::HKEY root, const wstring& path, ::REGSAM sam_desired = KEY_READ | KEY_WRITE);
230
238 NEFORCE_NODISCARD registry_key open_sub_key(const wstring& name, REGSAM sam_desired = KEY_READ) const;
239
248
255
263 static void delete_key_tree(::HKEY root, const wstring& path);
264
270 NEFORCE_NODISCARD bool has_sub_key(const wstring& name) const;
271
277 NEFORCE_NODISCARD bool has_value(const wstring& name) const;
278
284 NEFORCE_NODISCARD vector<wstring> enum_sub_key_names() const;
285
291 NEFORCE_NODISCARD vector<value_info> enum_values() const;
292
299 void set_string_value(const wstring& name, const wstring& value);
300
307 void set_expand_string_value(const wstring& name, const wstring& value);
308
315 void set_dword_value(const wstring& name, ::DWORD value);
316
323 void set_qword_value(const wstring& name, ::ULONGLONG value);
324
332 void set_binary_value(const wstring& name, const ::BYTE* data, ::DWORD size);
333
343
351 NEFORCE_NODISCARD wstring get_string_value(const wstring& name, const wstring& default_val = L"") const;
352
359 NEFORCE_NODISCARD ::DWORD get_dword_value(const wstring& name, DWORD default_val = 0) const noexcept;
360
367 NEFORCE_NODISCARD ::ULONGLONG get_qword_value(const wstring& name, ULONGLONG default_val = 0) const noexcept;
368
375 NEFORCE_NODISCARD vector<byte_t> get_binary_value(const wstring& name) const;
376
383 NEFORCE_NODISCARD vector<wstring> get_multi_string_value(const wstring& name) const;
384
389 NEFORCE_NODISCARD ::HKEY native_handle() const noexcept { return hkey_; }
390};
391 // Registry
393
394NEFORCE_END_NAMESPACE__
395#endif
396#endif // NEFORCE_CORE_SYSTEM_REGISTRY_HPP__
文件路径类
vector< wstring > get_multi_string_value(const wstring &name) const
获取多字符串值
bool has_sub_key(const wstring &name) const
检查是否存在指定的子项
registry_key()=default
默认构造函数
void set_multi_string_value(const wstring &name, const vector< wstring > &values)
设置多字符串值
vector< value_info > enum_values() const
枚举所有值
void create_sub_key(const wstring &name)
创建子项
value_type
系统注册表值类型枚举
void set_qword_value(const wstring &name, ::ULONGLONG value)
设置64位整数值
bool has_value(const wstring &name) const
检查是否存在指定的值
::HKEY native_handle() const noexcept
获取原生注册表句柄
void set_expand_string_value(const wstring &name, const wstring &value)
设置可扩展字符串值
::DWORD get_dword_value(const wstring &name, DWORD default_val=0) const noexcept
获取32位整数值
void set_dword_value(const wstring &name, ::DWORD value)
设置32位整数值
void delete_value(const wstring &name)
删除值
void set_binary_value(const wstring &name, const ::BYTE *data, ::DWORD size)
设置二进制值
void open(::HKEY root, const wstring &path, ::REGSAM sam_desired=KEY_READ|KEY_WRITE)
打开注册表项
void delete_sub_key(const wstring &name)
删除子项
registry_key open_sub_key(const wstring &name, REGSAM sam_desired=KEY_READ) const
打开子项
static void delete_key_tree(::HKEY root, const wstring &path)
递归删除注册表项树
wstring get_string_value(const wstring &name, const wstring &default_val=L"") const
获取字符串值
vector< wstring > enum_sub_key_names() const
枚举所有子项名称
::ULONGLONG get_qword_value(const wstring &name, ULONGLONG default_val=0) const noexcept
获取64位整数值
bool is_valid() const noexcept
检查注册表项是否有效
vector< byte_t > get_binary_value(const wstring &name) const
获取二进制值
void set_string_value(const wstring &name, const wstring &value)
设置字符串值
动态大小数组容器
unsigned char byte_t
字节类型,定义为无符号字符
constexpr none_t none
默认空表示
basic_string< wchar_t > wstring
宽字符字符串
bool name(char *buffer, size_t size)
获取当前线程名称
constexpr decltype(auto) size(const Container &cont) noexcept(noexcept(cont.size()))
获取容器的大小
constexpr decltype(auto) data(Container &cont) noexcept(noexcept(cont.data()))
获取容器的底层数据指针
字符串类型别名和实用函数
异常基类
const char * type() const noexcept
获取异常类型
int code() const noexcept
获取异常码
系统注册表根键常量
::HKEY current_user() noexcept
HKEY_CURRENT_USER根键
::HKEY users() noexcept
HKEY_USERS根键
::HKEY local_machine() noexcept
HKEY_LOCAL_MACHINE根键
::HKEY current_config() noexcept
HKEY_CURRENT_CONFIG根键
::HKEY classes_root() noexcept
HKEY_CLASSES_ROOT根键
系统注册表值信息结构
vector< byte_t > data
原始数据
vector< wstring > to_multi_string() const
将值数据转换为多字符串列表
::ULONGLONG to_qword() const noexcept
将值数据转换为64位整数
::DWORD to_dword() const noexcept
将值数据转换为32位整数
wstring to_string() const
将值数据转换为字符串
registry_key_exception(const char *info="Registry Key Operation Failed.", const char *type=static_type, const int code=0) noexcept
构造函数
系统访问异常
动态大小数组容器
WindowsAPI 平台宏