【QT】-windous 应用程序开机自启
对于已经编译好的.exe ,不通过代码,直接在 Windows 系统中设置开机自启,最简单的方式是利用 启动文件夹 ;如果要在 Qt 代码中实现,相对简单且推荐的是 修改注册表 方式,以下分别介绍:
直接在 Windows 系统中设置(不编写代码)
打开启动文件夹:按下 Win + R 组合键,打开 “运行” 对话框,输入 shell:startup ,然后回车。这会直接打开当前用户的启动文件夹,路径类似于 C:\Users\你的用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 。
创建快捷方式:找到编译好的 番茄时钟.exe 文件,右键点击它,选择 “创建快捷方式” 。然后将创建好的快捷方式,复制或移动到刚才打开的启动文件夹中。
这样,下次开机时,Windows 就会自动运行该程序的快捷方式,从而启动番茄时钟程序。
在 Qt 代码中实现(推荐修改注册表方式)
以下是具体示例代码:
cpp
#include <windows.h>
#include <QCoreApplication>
#include <QString>// 设置开机自启的函数,enable为true表示设置开机自启,false表示取消开机自启
void setAutoStart(bool enable)
{// 获取应用程序名称QString appName = QCoreApplication::applicationName();// 获取应用程序可执行文件的完整路径QString appPath = QCoreApplication::applicationFilePath();// 注册表键路径,Run键下的程序会在开机时自动运行QString key = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"; HKEY hKey;// 尝试打开注册表键,获取读写权限if (RegOpenKeyEx(HKEY_CURRENT_USER, key.toStdWString().c_str(), 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS) {if (enable) {// 将应用程序路径写入注册表对应键值,实现开机自启RegSetValueEx(hKey, appName.toStdWString().c_str(), 0, REG_SZ, reinterpret_cast<const BYTE*>(appPath.toStdWString().c_str()), (appPath.length() + 1) * sizeof(wchar_t)); } else {// 删除对应的键值,取消开机自启RegDeleteValue(hKey, appName.toStdWString().c_str()); }// 关闭打开的注册表键RegCloseKey(hKey); }
}
你可以在程序的合适位置调用这个函数,比如在设置界面提供一个 “开机自启” 的复选框,当用户勾选或取消勾选时,调用该函数:
cpp
#include <QWidget>
#include <QVBoxLayout>
#include <QCheckBox>
#include <QApplication>
#include <QDebug>class MainWidget : public QWidget
{Q_OBJECT
public:MainWidget(QWidget *parent = nullptr) : QWidget(parent){QVBoxLayout *layout = new QVBoxLayout(this);QCheckBox *autoStartCheckBox = new QCheckBox("开机自启", this);connect(autoStartCheckBox, &QCheckBox::toggled, this, [this](bool checked) {setAutoStart(checked);qDebug() << "开机自启设置为:" << checked;});layout->addWidget(autoStartCheckBox);setLayout(layout);}
};
在 main 函数中:
cpp
#include <QApplication>
int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWidget w;w.show();return a.exec();
}
上述代码中,setAutoStart 函数通过调用 Windows 的注册表操作 API ,实现了对开机自启状态的设置。在界面中通过连接复选框的 toggled 信号,来根据用户的选择设置开机自启。这样的实现方式相对简单直接,且不需要额外引入第三方库。
需要注意的是,使用注册表操作要谨慎,错误的操作可能会影响系统正常运行,建议在正式使用前做好备份或在测试环境中充分验证。