Qt自启动信息写入注册表
Qt自启动信息写入注册表
/*
*┌────────────────────────────────────────────────┐
*│ 描 述:Qt程序自启动设置
*│ 作 者:windSnowLi
*│ 版 本:0.0.1
*│ 创建时间:2020/05/31
*└────────────────────────────────────────────────┘
*┌────────────────────────────────────────────────┐
*│ 命名空间:无
*│ 类 名:无
*│ 参 数:(int) 参数int 0为取消自启动,1为设置自启动,2为查询自启动,自启动返回true,不是自启动返回false
*└────────────────────────────────────────────────┘
*/
bool OperationAutoStart(int operation)
{
//程序名称
QString appName = QApplication::applicationName();
// 程序路径
QString application_path = QApplication::applicationFilePath();
application_path.replace("/", "\\");
application_path = "\"" + application_path + "\" auto";
std::shared_ptr<QSettings> reg = std::make_shared<QSettings>(
"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",
QSettings::NativeFormat);
// 如果此键不存在,则返回的是空字符串
QString val = reg->value(appName).toString();
switch (operation) {
//取消自启动
case 0:
//移除键
reg->remove(appName);
break;
//设置自启动
case 1:
if (val != application_path) {
//写入随意的字符串都能写入,但唯独自启动的程序路径写入自动成空,加入这个先添加空的值得解决了
reg.setValue(appName, "\"\"");
//设置键
reg->setValue(appName, application_path);
}
break;
//查询自启动
case 2:
if (val.compare(application_path) == 0) {
reg->deleteLater();
return true;
}
else {
reg->deleteLater();
return false;
}
break;
default:
reg->deleteLater();
return false;
}
return false;
}
原文:https://www.blog.hiyj.cn/article/detail/77