1#ifndef NEFORCE_CORE_SYSTEM_REGISTRY_KEY_HPP__
2#define NEFORCE_CORE_SYSTEM_REGISTRY_KEY_HPP__
13#ifdef NEFORCE_PLATFORM_WINDOWS
14# include "NeForce/core/exception/system_exception.hpp"
17NEFORCE_BEGIN_NAMESPACE__
29struct registry_key_exception final : system_exception {
30 explicit registry_key_exception(
const char* info =
"Registry Key Operation Failed.",
32 system_exception(info, code) {}
34 explicit registry_key_exception(
const exception& e) :
35 system_exception(e) {}
37 ~registry_key_exception()
override =
default;
39 NEFORCE_NODISCARD
const char*
type() const noexcept
override {
return "registry_key_exception"; }
67 static ::HKEY
classes_root() noexcept {
return HKEY_CLASSES_ROOT; }
73 static ::HKEY
current_user() noexcept {
return HKEY_CURRENT_USER; }
85 static ::HKEY
users() noexcept {
return HKEY_USERS; }
103 expand_string = REG_EXPAND_SZ,
107 multi_string = REG_MULTI_SZ
140 NEFORCE_NODISCARD ::DWORD
to_dword() const noexcept;
146 NEFORCE_NODISCARD ::ULONGLONG
to_qword() const noexcept;
157 ::HKEY hkey_ =
nullptr;
158 bool owns_handle_ = false;
160 void close() noexcept;
161 void throw_if_invalid() const;
207 NEFORCE_NODISCARD
bool is_valid() const noexcept {
return hkey_ !=
nullptr; }
213 explicit operator bool() const noexcept {
return is_valid(); }
233 void open(::HKEY root,
const wstring&
path, ::REGSAM sam_desired = KEY_READ | KEY_WRITE);
417NEFORCE_END_NAMESPACE__
registry_key open_sub_key(const wstring &name, REGSAM sam_desired=KEY_READ) const
打开子项
void open(::HKEY root, const wstring &path, ::REGSAM sam_desired=KEY_READ|KEY_WRITE)
打开注册表项
void create_sub_key(const wstring &name)
创建子项
bool has_value(const wstring &name) const
检查是否存在指定的值
void set_multi_string_value(const wstring &name, const vector< wstring > &values)
设置多字符串值
bool is_valid() const noexcept
检查注册表项是否有效
vector< value_info > enum_values() const
枚举所有值
void set_expand_string_value(const wstring &name, const wstring &value)
设置可扩展字符串值
void set_string_value(const wstring &name, const wstring &value)
设置字符串值
bool notify_change(bool watch_subtree=true, int timeout_ms=-1)
监听注册表项变更(阻塞直到变更或超时)
vector< wstring > enum_sub_key_names() const
枚举所有子项名称
wstring get_string_value(const wstring &name, const wstring &default_val=L"") const
获取字符串值
vector< wstring > get_multi_string_value(const wstring &name) const
获取多字符串值
void set_qword_value(const wstring &name, ::ULONGLONG value)
设置64位整数值
vector< byte_t > get_binary_value(const wstring &name) const
获取二进制值
::DWORD get_dword_value(const wstring &name, DWORD default_val=0) const noexcept
获取32位整数值
bool has_sub_key(const wstring &name) const
检查是否存在指定的子项
wow64_view
注册表 32/64 位视图控制
void delete_value(const wstring &name)
删除值
::HKEY native_handle() const noexcept
获取原生注册表句柄
void open(::HKEY root, const wstring &path, wow64_view view, ::REGSAM sam_desired=KEY_READ|KEY_WRITE)
打开注册表项
void set_dword_value(const wstring &name, ::DWORD value)
设置32位整数值
registry_key()=default
默认构造函数
void delete_sub_key(const wstring &name)
删除子项
::ULONGLONG get_qword_value(const wstring &name, ULONGLONG default_val=0) const noexcept
获取64位整数值
static void delete_key_tree(::HKEY root, const wstring &path)
递归删除注册表项树
void set_binary_value(const wstring &name, const ::BYTE *data, ::DWORD size)
设置二进制值
unsigned char byte_t
字节类型,定义为无符号字符
error_code last_error() noexcept
获取当前系统错误码
constexpr none_t none
默认空表示
basic_string< wchar_t > wstring
宽字符字符串
constexpr decltype(auto) size(const Container &cont) noexcept(noexcept(cont.size()))
获取容器的大小
constexpr decltype(auto) data(Container &cont) noexcept(noexcept(cont.data()))
获取容器的底层数据指针
::HKEY users() noexcept
HKEY_USERS根键
::HKEY classes_root() noexcept
HKEY_CLASSES_ROOT根键
::HKEY current_user() noexcept
HKEY_CURRENT_USER根键
::HKEY local_machine() noexcept
HKEY_LOCAL_MACHINE根键
::HKEY current_config() noexcept
HKEY_CURRENT_CONFIG根键
::ULONGLONG to_qword() const noexcept
将值数据转换为64位整数
::DWORD to_dword() const noexcept
将值数据转换为32位整数
wstring to_string() const
将值数据转换为字符串
vector< byte_t > data
原始数据
vector< wstring > to_multi_string() const
将值数据转换为多字符串列表
const char * type() const noexcept override
获取异常类型