Windows下设置开机自启动的方式(手动/C++代码的形式)
Windows下自启动相关软件的原理
- 首先讲解一下Windows下是如何会实现开机自启动相关软件的原理,由于Windows本身有注册表机制,所谓注册表,可以理解其为Windows自带的数据库。在
win+r
输入regedit
即可查看
- 如图所示,注册表当中基本上都是以
key-value
的形式进行保存。 - 然后Windows在系统打开时,就会默认先去读取数据库(即注册表)的相关配置信息来自启动相关软件,那样恶意流氓软件也可以通过修改注册表的信息来对系统进行攻击。
- 所以,如果设置开机自启动,其实只要在注册表中修改相应的值即可。
- 修改位置在注册表中存放于:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
当中,只要在其中右键添加相应的字符串值即可。
- 其中需要启动软件路径字符串需要添加引号才行。
C++代码方式设置 开机自启动软件
- 在了解完原理之后,C++代码启动做的事就很简单了,写入注册表即可
- 接下来是相关代码
bool WriteToRegedit(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 SetBootStartUp(std::wstring key_,std::wstring path_ )
{
return WriteToRegedit(HKEY_CURRENT_USER,L"Software\\Microsoft\\Windows\\CurrentVersion\\Run",key_,path_);
}
代码比较简单,也就是写入字符串到对应注册表的位置,
使用方法:
std::wstring key_ = L"TestDemo";
std::wstring path = L"\"SSSS\"";
SetBootStartUp(key_,path);
- 希望对大家有帮助
Windows下设置开机自启动的方式(手动/C++代码的形式)
Windows下自启动相关软件的原理
- 首先讲解一下Windows下是如何会实现开机自启动相关软件的原理,由于Windows本身有注册表机制,所谓注册表,可以理解其为Windows自带的数据库。在
win+r
输入regedit
即可查看
- 如图所示,注册表当中基本上都是以
key-value
的形式进行保存。 - 然后Windows在系统打开时,就会默认先去读取数据库(即注册表)的相关配置信息来自启动相关软件,那样恶意流氓软件也可以通过修改注册表的信息来对系统进行攻击。
- 所以,如果设置开机自启动,其实只要在注册表中修改相应的值即可。
- 修改位置在注册表中存放于:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
当中,只要在其中右键添加相应的字符串值即可。
- 其中需要启动软件路径字符串需要添加引号才行。
C++代码方式设置 开机自启动软件
- 在了解完原理之后,C++代码启动做的事就很简单了,写入注册表即可
- 接下来是相关代码
bool WriteToRegedit(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 SetBootStartUp(std::wstring key_,std::wstring path_ )
{
return WriteToRegedit(HKEY_CURRENT_USER,L"Software\\Microsoft\\Windows\\CurrentVersion\\Run",key_,path_);
}
代码比较简单,也就是写入字符串到对应注册表的位置,
使用方法:
std::wstring key_ = L"TestDemo";
std::wstring path = L"\"SSSS\"";
SetBootStartUp(key_,path);
- 希望对大家有帮助