启动注册表管理器
REG -- 注册表(registry)
EDIT-- 控制
启动regedit后的界面
注册表类型
通过CMD REG ADD /?可获取 : (6条消息) C++ 命令行CMD 的控制与源代码_BOOKPYZ的博客-CSDN博客
MicroSoft : Registry value types - Win32 apps | Microsoft Learn
REG_BINARY | 任意格式的二进制数据。 |
REG_DWORD | 32 位数字。 |
REG_DWORD_LITTLE_ENDIAN | 采用 little-endian 格式的 32 位数字。 Windows 设计为在 little-endian 计算机体系结构上运行。 因此,此值在 Windows 头文件中定义为 REG_DWORD 。 |
REG_DWORD_BIG_ENDIAN | 采用 big-endian 格式的 32 位数字。 某些 UNIX 系统支持 big-endian 体系结构。 |
REG_EXPAND_SZ | 一个以 null 结尾的字符串,其中包含对环境变量(例如 %PATH%)的未扩展引用。 它是 Unicode 或 ANSI 字符串,具体取决于是使用 Unicode 函数还是 ANSI 函数。 若要展开环境变量引用,请使用 ExpandEnvironmentStrings 函数。 |
REG_LINK | 一个以 null 结尾的 Unicode 字符串,其中包含通过调用具有 REG_OPTION_CREATE_LINK 的 RegCreateKeyEx 函数创建的符号链接的目标路径。 |
REG_MULTI_SZ | 以 null 结尾的字符串序列,由空字符串终止, (\0 ) 。 下面是一个示例: String1\0String2\0String3\0LastString\0\0 。 第一个 \0 终止第一个字符串,第二个终止 \0 最后一个字符串,最后一个 \0 终止序列。 请注意,最终终止符必须计入字符串的长度。 |
REG_NONE | 没有定义的值类型。 |
REG_QWORD | 64 位数字。 |
REG_QWORD_LITTLE_ENDIAN | 采用 little-endian 格式的 64 位数字。 Windows is designed to run on little-endian computer architectures. Therefore, this value is defined as REG_QWORD in the Windows header files. |
REG_SZ | 以 null 终止的字符串。 It's either a Unicode or an ANSI string, depending on whether you use the Unicode or ANSI functions. |
注册表代码控制
关键类型:HKEY
创建注册表
WINADVAPI
LSTATUS
APIENTRY
RegCreateKeyW (
_In_ HKEY hKey,
_In_opt_ LPCWSTR lpSubKey,
_Out_ PHKEY phkResult
);
打开注册表
WINADVAPI
LSTATUS
APIENTRY
RegOpenKeyW (
_In_ HKEY hKey,
_In_opt_ LPCWSTR lpSubKey,
_Out_ PHKEY phkResult
);
写入注册表
WINADVAPI
LSTATUS
APIENTRY
RegSetValueW (
_In_ HKEY hKey,
_In_opt_ LPCWSTR lpSubKey,
_In_ DWORD dwType,
_In_reads_bytes_opt_(cbData) LPCWSTR lpData,
_In_ DWORD cbData
);
设置注册表
WINADVAPI
LSTATUS
APIENTRY
RegSetValueExW(
_In_ HKEY hKey,
_In_opt_ LPCWSTR lpValueName,
_Reserved_ DWORD Reserved,
_In_ DWORD dwType,
_In_reads_bytes_opt_(cbData) CONST BYTE* lpData,
_In_ DWORD cbData
);
读取注册表
WINADVAPI
LSTATUS
APIENTRY
RegQueryValueW (
_In_ HKEY hKey,
_In_opt_ LPCWSTR lpSubKey,
_Out_writes_bytes_to_opt_(*lpcbData, *lpcbData) __out_data_source(REGISTRY) LPWSTR lpData,
_Inout_opt_ PLONG lpcbData
);
实例:
#include <winreg.h>
bool RegCtrl(){
HKEY hKey;
DWORD Type = 1;
int reg = ::RegCreateKeyW(HKEY_LOCAL_MACHINE,L"SOFTWARE\\NewWrite",&hKey);
if(reg){
return false;
}
//写入
reg = ::RegSetValueEx(hKey,L"type",0,REG_DWORD,(CONST BYTE *)&Type,4);
if(reg != ERROR_SUCCESS){
return false;
}
//读取
DWORD dwType = 0,dwValue = 0;
reg = ::RegQueryValueEx(hKey,L"type",0,&dwType,(LPBYTE)&Type,&dwValue);
if(reg != ERROR_SUCCESS){
return false;
}
::RegCloseKey(hKey);
return true;
}
开机启动项
当电脑开机时,操作系统会发出开启指令,并运行加载至开机启动项中的可执行文件
操作系统会搜寻注册表中HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run目录
添加实例
bool WriteToReg(HKEY hKey_,std::wstring path_,std::wstring key_,std::wstring value_)
{
HKEY hkey;
::RegCreateKeyExW(hKey_,
path_.c_str(),
0,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_WRITE,
NULL,
&hkey,
NULL);
//
::RegSetValueExW(hkey,
key_.c_str(),
0,
REG_SZ,
reinterpret_cast<LPBYTE>(const_cast<wchar_t*>(value_.c_str())),
sizeof(std::wstring::value_type) * (value_.size() + 1));
::RegCloseKey(hkey);
return true;
}
// 设置开机自启动方法
// @param:key_:启动项名称
// @param:value_:启动文件路径
// return: false: 设置失败 true:设置成功
bool SetStartUp(std::wstring key_,std::wstring path_ )
{
bool bl = WriteToRegedit(HKEY_CURRENT_USER,L"Software\\Microsoft\\Windows\\CurrentVersion\\ Run",key_,path_);
}