1#ifndef NEFORCE_CORE_SYSTEM_REGISTRY_HPP__
2#define NEFORCE_CORE_SYSTEM_REGISTRY_HPP__
13#ifdef NEFORCE_PLATFORM_WINDOWS
18NEFORCE_BEGIN_NAMESPACE__
38 const int code = 0) noexcept :
39 system_exception(info,
type,
code) {}
45 static constexpr auto static_type =
"registry_key_exception";
73 static ::HKEY
classes_root() noexcept {
return HKEY_CLASSES_ROOT; }
79 static ::HKEY
current_user() noexcept {
return HKEY_CURRENT_USER; }
91 static ::HKEY
users() noexcept {
return HKEY_USERS; }
109 expand_string = REG_EXPAND_SZ,
113 multi_string = REG_MULTI_SZ
136 NEFORCE_NODISCARD ::DWORD
to_dword() const noexcept;
142 NEFORCE_NODISCARD ::ULONGLONG
to_qword() const noexcept;
153 ::HKEY hkey_ =
nullptr;
154 bool owns_handle_ = false;
156 void close() noexcept;
157 void throw_if_invalid() const;
203 NEFORCE_NODISCARD
bool is_valid() const noexcept {
return hkey_ !=
nullptr; }
209 explicit operator bool() const noexcept {
return is_valid(); }
229 void open(::HKEY root,
const wstring&
path, ::REGSAM sam_desired = KEY_READ | KEY_WRITE);
394NEFORCE_END_NAMESPACE__
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)
创建子项
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
构造函数