Windows下设置开机自启动的方式(手动/C++代码的形式)

Windows下设置开机自启动的方式(手动/C++代码的形式)

Windows下自启动相关软件的原理

  • 首先讲解一下Windows下是如何会实现开机自启动相关软件的原理,由于Windows本身有注册表机制,所谓注册表,可以理解其为Windows自带的数据库。在win+r输入regedit即可查看

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vJv0UyPL-1582611586965)(C:\Users\coder\AppData\Roaming\Typora\typora-user-images\1582610313319.png)]

  • 如图所示,注册表当中基本上都是以key-value的形式进行保存。
  • 然后Windows在系统打开时,就会默认先去读取数据库(即注册表)的相关配置信息来自启动相关软件,那样恶意流氓软件也可以通过修改注册表的信息来对系统进行攻击。
  • 所以,如果设置开机自启动,其实只要在注册表中修改相应的值即可。
  • 修改位置在注册表中存放于:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run当中,只要在其中右键添加相应的字符串值即可。
    * [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rRIhRz3L-1582611586973)(C:\Users\coder\AppData\Roaming\Typora\typora-user-images\1582610584328.png)]
  • 其中需要启动软件路径字符串需要添加引号才行。

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);
  • 希望对大家有帮助
发布了382 篇原创文章 · 获赞 122 · 访问量 40万+

猜你喜欢

转载自blog.csdn.net/Giser_D/article/details/104496865