Skip to content

Commit

Permalink
实现开机自启动功能
Browse files Browse the repository at this point in the history
  • Loading branch information
Asteri5m committed Jun 25, 2024
1 parent c89962e commit fb9b0a4
Show file tree
Hide file tree
Showing 4 changed files with 119 additions and 29 deletions.
7 changes: 5 additions & 2 deletions LazyDogTools.pro
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++17

LIBS += -lOle32 -lUser32 -lShlwapi -lversion
LIBS += -lOle32 -lUser32 -lShlwapi -lversion -ladvapi32

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
Expand All @@ -31,7 +31,7 @@ FORMS += \
RC_ICONS = LD_64.ico

#添加版本
VERSION = 0.0.1
VERSION = 0.0.2


# Default rules for deployment.
Expand All @@ -41,3 +41,6 @@ else: unix:!android: target.path = /opt/$${TARGET}/bin

RESOURCES += \
images.qrc


QMAKE_PROJECT_DEPTH = 0
47 changes: 23 additions & 24 deletions LazyDogTools.pro.user
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 10.0.0, 2023-10-19T22:59:20. -->
<!-- Written by QtCreator 13.0.2, 2024-06-26T00:14:10. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{dc89d8f1-9ec3-4344-ba5f-487dc88aa1b2}</value>
<value type="QByteArray">{5c4f436f-24a1-4f00-ba3f-3738a6785b1a}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
Expand All @@ -28,13 +28,7 @@
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.2">
<value type="QString" key="language">Nim</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">NimGlobal</value>
</valuemap>
</valuemap>
<value type="qlonglong" key="EditorConfiguration.CodeStyle.Count">3</value>
<value type="qlonglong" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
Expand All @@ -43,10 +37,11 @@
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="int" key="EditorConfiguration.PreferAfterWhitespaceComments">0</value>
<value type="bool" key="EditorConfiguration.PreferSingleLineComments">false</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">2</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
Expand Down Expand Up @@ -82,6 +77,7 @@
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
<value type="int" key="ClangTools.ParallelJobs">8</value>
<value type="bool" key="ClangTools.PreferConfigFile">true</value>
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
Expand All @@ -93,16 +89,16 @@
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 6.5.0 MSVC2019 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 6.5.0 MSVC2019 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt6.650.win64_msvc2019_64_kit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 6.7.1 MSVC2019 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 6.7.1 MSVC2019 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt6.671.win64_msvc2019_64_kit</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:\Qt\Project\build-LazyDogTools-Desktop_Qt_6_5_0_MSVC2019_64bit-Debug</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">D:/Qt/Project/build-LazyDogTools-Desktop_Qt_6_5_0_MSVC2019_64bit-Debug</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:\QT Project\LazyDogTools</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">D:/QT Project/LazyDogTools</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
Expand Down Expand Up @@ -140,8 +136,8 @@
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:\Qt\Project\build-LazyDogTools-Desktop_Qt_6_5_0_MSVC2019_64bit-Release</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">D:/Qt/Project/build-LazyDogTools-Desktop_Qt_6_5_0_MSVC2019_64bit-Release</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:\QT Project\LazyDogTools</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">D:/QT Project/LazyDogTools</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
Expand Down Expand Up @@ -181,8 +177,8 @@
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:\Qt\Project\build-LazyDogTools-Desktop_Qt_6_5_0_MSVC2019_64bit-Profile</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">D:/Qt/Project/build-LazyDogTools-Desktop_Qt_6_5_0_MSVC2019_64bit-Profile</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:\QT Project\LazyDogTools\build\Desktop_Qt_6_7_1_MSVC2019_64bit-Profile</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">D:/QT Project/LazyDogTools/build/Desktop_Qt_6_7_1_MSVC2019_64bit-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
Expand Down Expand Up @@ -238,18 +234,21 @@
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="int" key="Analyzer.Valgrind.Callgrind.CostFormat">0</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:D:/Qt/Project/LazyDogTools/LazyDogTools.pro</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">D:/Qt/Project/LazyDogTools/LazyDogTools.pro</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="PE.EnvironmentAspect.PrintOnRun">false</value>
<value type="QString" key="PerfRecordArgsId">-e cpu-cycles --call-graph &quot;dwarf,4096&quot; -F 250</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:D:/QT Project/LazyDogTools/LazyDogTools.pro</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">D:/QT Project/LazyDogTools/LazyDogTools.pro</value>
<value type="bool" key="ProjectExplorer.RunConfiguration.Customized">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">D:/Qt/Project/build-LazyDogTools-Desktop_Qt_6_5_0_MSVC2019_64bit-Release</value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">D:/QT Project/LazyDogTools</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
Expand Down
89 changes: 88 additions & 1 deletion lazydog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -411,6 +411,88 @@ void LazyDog::SaveSettingConfig()
ShowDebugText(D_Warn, "设置已更改,保存至配置文件失败,仅本次运行生效");
}

//设置开机自启动
bool LazyDog::SetAutostartAtPoweron(bool setFlag)
{
QString regPath = "Software\\Microsoft\\Windows\\CurrentVersion\\Run";
QString key = "LazyDogTools";
bool result = false;
if(setFlag){
QString myPath = QString("\"%1\"").arg(QCoreApplication::applicationFilePath());
qDebug() << "exe path:" << myPath;
result = AddRegedit(regPath, key, myPath);
}else {
result = DelRegedit(regPath, key);
}

QString text = result ? "修改开机启动项成功": "修改开机启动项失败";
ShowDebugText(D_Info, text);
return result;
}

//添加注册表
bool LazyDog::AddRegedit(QString regpath, QString key, QString value)
{
// 将 QString 转换为 const wchar_t*,因为 Windows API 使用的是 wchar_t*
LPCWSTR subkey = reinterpret_cast<LPCWSTR>(regpath.utf16());
LPCWSTR entry = reinterpret_cast<LPCWSTR>(key.utf16());
LPCWSTR data = reinterpret_cast<LPCWSTR>(value.utf16());

// 打开注册表项
HKEY hKey;
LONG result = RegOpenKeyEx(HKEY_CURRENT_USER, subkey, 0, KEY_SET_VALUE, &hKey);
if (result != ERROR_SUCCESS) {
qDebug() << "Error opening registry key:" << result;
ShowDebugText(D_Error, "打开注册表失败,错误代码:" + QString::number(result));
return false;
}

// 设置注册表值
result = RegSetValueEx(hKey, entry, 0, REG_SZ, reinterpret_cast<const BYTE*>(data), (wcslen(data) + 1) * sizeof(wchar_t));
if (result != ERROR_SUCCESS) {
qDebug() << "Error setting registry value:" << result;
RegCloseKey(hKey);
ShowDebugText(D_Error, "设置注册表失败,错误代码:" + QString::number(result));
return false;
}

// 关闭注册表项
RegCloseKey(hKey);
ShowDebugText(D_Info, "修改注册表成功");
return true;
}

//删除注册表
bool LazyDog::DelRegedit(QString regpath, QString key)
{
// 将 QString 转换为 const wchar_t*,因为 Windows API 使用的是 wchar_t*
LPCWSTR subkey = reinterpret_cast<LPCWSTR>(regpath.utf16());
LPCWSTR entry = reinterpret_cast<LPCWSTR>(key.utf16());

// 打开注册表项
HKEY hKey;
LONG result = RegOpenKeyEx(HKEY_CURRENT_USER, subkey, 0, KEY_SET_VALUE, &hKey);
if (result != ERROR_SUCCESS) {
qDebug() << "Error opening registry key:" << result;
ShowDebugText(D_Error, "打开注册表失败,错误代码:" + QString::number(result));
return false;
}

// 删除注册表值
result = RegDeleteValue(hKey, entry);
if (result != ERROR_SUCCESS) {
qDebug() << "Error deleting registry value:" << result;
RegCloseKey(hKey);
ShowDebugText(D_Error, "设置注册表失败,错误代码:" + QString::number(result));
return false;
}

// 关闭注册表项
RegCloseKey(hKey);
ShowDebugText(D_Info, "修改注册表成功");
return true;
}

//重写关闭信号
void LazyDog::closeEvent(QCloseEvent *event)
{
Expand Down Expand Up @@ -720,7 +802,12 @@ void LazyDog::on_checkBox_autostart_clicked(bool checked)
{
QString boolString = checked ? "true" : "false";
lazyconfig[Config.Autostart] = boolString;
SaveSettingConfig();
if(SetAutostartAtPoweron(checked)){
SaveSettingConfig();
}else {
ui->checkBox_autostart->setChecked(!checked);
}

}

//设置---管理员模式启动
Expand Down
5 changes: 3 additions & 2 deletions lazydog.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,7 @@ private slots:
void on_keySequenceEdit_changemode_keySequenceChanged(const QKeySequence &keySequence);
void on_keySequenceEdit_changeup_keySequenceChanged(const QKeySequence &keySequence);
void on_keySequenceEdit_changedown_keySequenceChanged(const QKeySequence &keySequence);

void on_checkBox_autohidden_clicked(bool checked);

void on_checkBox_changemsg_clicked(bool checked);

private:
Expand Down Expand Up @@ -105,6 +103,9 @@ private slots:
BindList LoadBindListFromXml();
QMap<QString, QString> JsonToMap(QByteArray data);
void SaveSettingConfig();
bool SetAutostartAtPoweron(bool setFlag);
bool AddRegedit(QString regpath, QString key, QString value);
bool DelRegedit(QString regpath, QString key);

protected:
void closeEvent(QCloseEvent *event);
Expand Down

0 comments on commit fb9b0a4

Please sign in to comment.