1、修改注册表
主要方法就是修改注册表:
#include "autorun.h"
#include <QDir>
#include <QSettings>
#include <QCoreApplication>
#include <qt_windows.h>
#define AUTO_RUN "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"
AutoRun::AutoRun(bool isStart)
{
QSettings *settings = new QSettings(AUTO_RUN, QSettings::NativeFormat);
QString application_name = QCoreApplication::applicationName();//获取应用名称
if(isStart)
{
QString appPath = QCoreApplication::applicationFilePath();//找到应用的目录
QString newPath = QDir::toNativeSeparators(appPath); //toNativeSeparators的意思是将"/"替换为"\"
settings->setValue(application_name, newPath);
}
else
{
settings->remove(application_name);
}
settings->deleteLater();
QString appPath = QCoreApplication::applicationDirPath();
QString newPath = QDir::toNativeSeparators(appPath);
SetCurrentDirectoryA(newPath.toStdString().c_str());
}
2、解决路径问题
最后三行代码是为了解决一个bug:
现象:生成的.exe文件,直接双击打开可以正常操作当前路径下的文件,但如果是开机自启动打开的该.exe文件,就会提示文件打不开;
原因:该方法是设置注册表,开机启动的文件路径为c:\windows\system32,与所需读写文件不在同一个目录;
解决办法:操作文件前执行以下三行代码即可。
QString appPath = QCoreApplication::applicationDirPath();
QString newPath = QDir::toNativeSeparators(appPath);
SetCurrentDirectoryA(newPath.toStdString().c_str());