C++ 注册表与开机启动项的管理

启动注册表管理器

 REG -- 注册表(registry)

 EDIT-- 控制

启动regedit后的界面

 注册表类型

通过CMD REG ADD /?可获取 : (6条消息) C++ 命令行CMD 的控制与源代码_BOOKPYZ的博客-CSDN博客

MicroSoft : Registry value types - Win32 apps | Microsoft Learn

REG_BINARY任意格式的二进制数据。
REG_DWORD32 位数字。
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_QWORD64 位数字。
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_);
}

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值