Qt功能系列(一):为程序添加开机自启功能

为你的Qt程序添加开机自启功能

原文链接:https://blog.csdn.net/hwc3737/article/details/108306600

实现原理:

软件设置开机自启,即通过在计算机注册表的HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run目录中,以键值对的方式写入程序名称和程序目录来实现。相反,关闭开机自启,则是通过删除注册表内该程序信息进行设置。

实现步骤:

下面以实际案例进行演示。

①最终效果

在这里插入图片描述

通过点击此checkBox(以上为修改样式表后效果),实现一键控制程序是否开机自启。
②添加头文件
#include <QSettings>
#include <QDir>
③注册表操作函数
说明:

可将此函数直接作为主窗口类的私有函数。

所需修改的地方:

函数内第一行的“YourAppName”需要修改为你的程序名称,作为写入注册表的程序标识。

void MainWindow::appAutoRun(bool bAutoRun)
{

    QString application_name = "YourAppName";
    QSettings *settings = new QSettings("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat);
    if(bAutoRun){
        QString application_path = QApplication::applicationFilePath();
        settings->setValue(application_name, application_path.replace("/", "\\"));
    }else{
        settings->remove(application_name);
    }
    delete settings;
}
调用方式:
appAutoRun(true);			//写入注册表,实现开机自启
appAutoRun(false);			//从注册表中移除,关闭开机自启
④判断是否已写入
说明:

此处仍直接作为主窗口类的私有函数。

所需修改的地方:

同上,“YourAppName”需要修改为你的程序标识名称。

bool MainWindow::isAppAutoRun()
{
	//查看注册表是否已经写入程序名称
	QSettings *reg = new QSettings("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat);
	QString strValue = reg->value("YourAppName").toString();	//获取注册表中“YourAppName”对应的路径值
	QString path = QDir::toNativeSeparators(QCoreApplication::applicationFilePath());	//获取当前程序完整路径
	bool flag = (strValue == path);		//flag为true则表示注册表中已有此项
	
	return flag;
}
⑤综合使用
为checkBox添加click(bool)信号:

在这里插入图片描述

代码内容:
void MainWindow::on_check_openself_clicked(bool checked)
{
    bool flag = isAppAutoRun();		//获取开机自启状态

    if(checked&&!flag){			//满足checkBox被选中同时未设置开机自启,则开启
        appAutoRun(true);
    }else if(!checked&&flag){	//满足checkBox未被选中同时已设置开机自启,则关闭
        appAutoRun(false);
    }
}
⑥功能完善
问题描述:

由于程序每次启动后,界面会恢复初始状态。导致设置开机自启并重启程序后,checkBox的初始状态没有跟实际情况相匹配,原本已设置开机自启,但checkBox并未展示,影响客户体验。

解决方法:

在界面窗口的构造函数中,添加检索注册表是否已有该程序,并根据结果对checkBox的初始状态进行设置。

实现如下:
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
	ui->setupUi(this);
	
    bool flag = isAppAutoRun();
    ui->check_openself->setChecked(flag);	//根据得到的flag对checkBox进行界面初始化
}

若有发现问题,欢迎留言补充。
转载请注明出处。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值