一、普通设置方法
QSettings reg("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat);
bool flag = true;
if (flag) {
//设置开机自启注册表
QString strAppPath = QDir::toNativeSeparators(QCoreApplication::applicationFilePath());
reg.setValue("exeName", strAppPath);
}
else {
//取消开机自启注册表
reg.remove("exeName");
}
1.QDir::toNativeSeparators将路径的"/"替换为"\\"
2.使用QCoreApplication获取路径需要上述代码写在QApplication a(argc, argv);代码之后.
3."exeName"一般使用软件名称,也可以设置为其他文本.
二、查看设置是否成功
1.按下Win+R打开运行窗口,输入regedit,打开注册表编辑器
2.照"HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run"路径打开
看到下面有新添加的“exeName”配置项,路径正确,即成功。
三、解决不能读取相对路径文件问题
问题描述:使用上诉方法设置开机自启后会发现,读取配置文件或其他文件失败,那是因为如果我们把程序设置为开机启动后,因为开机启动的指令其实也是CMD的指令,所以,如果我们在代码中使用以下代码获取程序路径,其实获取到的是CMD程序的运行路径,也就是“C:\Windows\System32”,所以相对路径下找不到文件。
解决方案:对exe程序设置快捷方式,将快捷方式添加到注册表。
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//设置开机自启
bool selfTurnOn = true;
QSettings reg("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat);
QString application_name = QApplication::applicationName();
QString application_path = QCoreApplication::applicationFilePath();
if (selfTurnOn) {
//设置开机自启注册表
application_path.replace(".exe", ".lnk");
if (!QFile::exists(application_path)) {
QFile::link(QCoreApplication::applicationFilePath(), application_name + ".lnk");
}
QString strAppPath = QDir::toNativeSeparators(application_path);
reg.setValue(application_name, strAppPath);
}
else {
//取消开机自启注册表
reg.remove(application_name);
}
return a.exec();
}