常规设置中增加开机自动运行方式的设置

This commit is contained in:
zhongyang219
2026-04-06 17:31:15 +08:00
parent fe4cf18676
commit fd290db88a
11 changed files with 155 additions and 71 deletions
+1
View File
@@ -337,6 +337,7 @@ struct GeneralSettingData
bool check_update_when_start{ true };
int update_source{}; //更新源。0: GitHub; 1: Gitee
bool auto_run{ false };
bool auto_run_by_task_scheduler{ false }; //是否通过任务计划程序实现开机自启
bool show_notify_icon{ true }; //显示通知区域图标
//通知消息
bool traffic_tip_enable{ false }; //是否启用流量超出时提示
+82 -23
View File
@@ -147,23 +147,31 @@ bool CGeneralSettingsDlg::ShowHardwareMonitorWarning()
void CGeneralSettingsDlg::AddOrUpdateAutoRunTooltip(bool add)
{
CString str_tool_tip;
#ifdef WITHOUT_TEMPERATURE
str_tool_tip = CCommon::LoadText(IDS_AUTO_RUN_METHOD_REGESTRY);
#else
str_tool_tip = CCommon::LoadText(IDS_AUTO_RUN_METHOD_TASK_SCHEDULE);
#endif
if (!m_auto_run_path.empty())
if (m_data.auto_run)
{
str_tool_tip += _T("\r\n");
str_tool_tip += CCommon::LoadText(IDS_PATH, _T(": "));
str_tool_tip += m_auto_run_path.c_str();
CString str_tool_tip;
if (m_data.auto_run_by_task_scheduler)
str_tool_tip = CCommon::LoadText(IDS_AUTO_RUN_METHOD_TASK_SCHEDULE);
else
str_tool_tip = CCommon::LoadText(IDS_AUTO_RUN_METHOD_REGESTRY);
if (!m_auto_run_path.empty())
{
str_tool_tip += _T("\r\n");
str_tool_tip += CCommon::LoadText(IDS_PATH, _T(": "));
str_tool_tip += m_auto_run_path.c_str();
}
if (add)
m_toolTip.AddTool(GetDlgItem(IDC_AUTO_RUN_CHECK), str_tool_tip);
else
m_toolTip.UpdateTipText(str_tool_tip, GetDlgItem(IDC_AUTO_RUN_CHECK));
}
if (add)
m_toolTip.AddTool(GetDlgItem(IDC_AUTO_RUN_CHECK), str_tool_tip);
else
m_toolTip.UpdateTipText(str_tool_tip, GetDlgItem(IDC_AUTO_RUN_CHECK));
{
if (add)
m_toolTip.AddTool(GetDlgItem(IDC_AUTO_RUN_CHECK), CString());
else
m_toolTip.UpdateTipText(CString(), GetDlgItem(IDC_AUTO_RUN_CHECK));
}
}
bool CGeneralSettingsDlg::IsMonitorTimeSpanModified() const
@@ -203,6 +211,10 @@ void CGeneralSettingsDlg::SetControlEnable()
m_select_cpu_combo.EnableWindow(m_data.IsHardwareEnable(HI_CPU));
EnableDlgCtrl(IDC_SELECT_CONNECTIONS_BUTTON, !m_data.show_all_interface);
EnableDlgCtrl(IDC_RESET_AUTO_RUN_BUTTON, m_data.auto_run);
EnableDlgCtrl(IDC_AUTO_RUN_METHOD_REGESTRY_RADIO, m_data.auto_run);
EnableDlgCtrl(IDC_AUTO_RUN_METHOD_TASK_SCHEDULE_RADIO, m_data.auto_run);
}
@@ -234,6 +246,8 @@ BEGIN_MESSAGE_MAP(CGeneralSettingsDlg, CTabDlg)
ON_BN_CLICKED(IDC_RESET_AUTO_RUN_BUTTON, &CGeneralSettingsDlg::OnBnClickedResetAutoRunButton)
ON_EN_CHANGE(IDC_MONITOR_SPAN_EDIT, &CGeneralSettingsDlg::OnEnChangeMonitorSpanEdit)
ON_MESSAGE(WM_SPIN_EDIT_POS_CHANGED, &CGeneralSettingsDlg::OnSpinEditPosChanged)
ON_BN_CLICKED(IDC_AUTO_RUN_METHOD_REGESTRY_RADIO, &CGeneralSettingsDlg::OnBnClickedAutoRunMethodRegestryRadio)
ON_BN_CLICKED(IDC_AUTO_RUN_METHOD_TASK_SCHEDULE_RADIO, &CGeneralSettingsDlg::OnBnClickedAutoRunMethodTaskScheduleRadio)
END_MESSAGE_MAP()
@@ -262,16 +276,46 @@ BOOL CGeneralSettingsDlg::OnInitDialog()
//检查开始菜单的“启动”目录下有没有程序的快捷方式,如果有则设置开机自启动,然后删除快捷方式
wstring start_up_path = CCommon::GetStartUpPath();
bool shortcut_exist = CCommon::FileExist((start_up_path + L"\\TrafficMonitor.lnk").c_str());
m_data.auto_run = false;
#ifdef WITHOUT_TEMPERATURE
m_data.auto_run_by_task_scheduler = false;
#else
m_data.auto_run_by_task_scheduler = true;
#endif
if (shortcut_exist)
{
theApp.SetAutoRun(true);
theApp.SetAutoRun(true, false);
m_data.auto_run = true;
DeleteFile((start_up_path + L"\\TrafficMonitor.lnk").c_str());
CheckDlgButton(IDC_AUTO_RUN_METHOD_REGESTRY_RADIO, TRUE);
}
//检查开机自动运行的设置是通过注册表还是任务计划程序实现的,并设置相应的选项
else
{
m_data.auto_run = theApp.GetAutoRun(&m_auto_run_path);
bool auto_run_by_registry = theApp.GetAutoRun(&m_auto_run_path, false);
if (auto_run_by_registry)
{
CheckDlgButton(IDC_AUTO_RUN_METHOD_REGESTRY_RADIO, TRUE);
m_data.auto_run = true;
m_data.auto_run_by_task_scheduler = false;
}
else
{
bool auto_run_by_task_scheduler = theApp.GetAutoRun(&m_auto_run_path, true);
if (auto_run_by_task_scheduler)
{
CheckDlgButton(IDC_AUTO_RUN_METHOD_TASK_SCHEDULE_RADIO, TRUE);
m_data.auto_run = true;
m_data.auto_run_by_task_scheduler = true;
}
}
}
if (m_data.auto_run_by_task_scheduler)
CheckDlgButton(IDC_AUTO_RUN_METHOD_TASK_SCHEDULE_RADIO, TRUE);
else
CheckDlgButton(IDC_AUTO_RUN_METHOD_REGESTRY_RADIO, TRUE);
((CButton*)GetDlgItem(IDC_SAVE_TO_APPDATA_RADIO))->SetCheck(!m_data.portable_mode);
((CButton*)GetDlgItem(IDC_SAVE_TO_PROGRAM_DIR_RADIO))->SetCheck(m_data.portable_mode);
@@ -413,15 +457,16 @@ void CGeneralSettingsDlg::OnBnClickedCheckNowButton()
void CGeneralSettingsDlg::OnBnClickedCheckUpdateCheck()
{
// TODO: 在此添加控件通知处理程序代码
m_data.check_update_when_start = (((CButton*)GetDlgItem(IDC_CHECK_UPDATE_CHECK))->GetCheck() != 0);
m_data.check_update_when_start = (IsDlgButtonChecked(IDC_CHECK_UPDATE_CHECK) != 0);
}
void CGeneralSettingsDlg::OnBnClickedAutoRunCheck()
{
// TODO: 在此添加控件通知处理程序代码
m_data.auto_run = (((CButton*)GetDlgItem(IDC_AUTO_RUN_CHECK))->GetCheck() != 0);
m_data.auto_run = (IsDlgButtonChecked(IDC_AUTO_RUN_CHECK) != 0);
m_auto_run_modified = true;
SetControlEnable();
}
@@ -492,7 +537,7 @@ void CGeneralSettingsDlg::OnOK()
void CGeneralSettingsDlg::OnBnClickedTodayTrafficTipCheck()
{
// TODO: 在此添加控件通知处理程序代码
m_data.traffic_tip_enable = (((CButton*)GetDlgItem(IDC_TODAY_TRAFFIC_TIP_CHECK))->GetCheck() != 0);
m_data.traffic_tip_enable = (IsDlgButtonChecked(IDC_TODAY_TRAFFIC_TIP_CHECK) != 0);
SetControlEnable();
}
@@ -500,7 +545,7 @@ void CGeneralSettingsDlg::OnBnClickedTodayTrafficTipCheck()
void CGeneralSettingsDlg::OnBnClickedMemoryUsageTipCheck()
{
// TODO: 在此添加控件通知处理程序代码
m_data.memory_usage_tip.enable = (((CButton*)GetDlgItem(IDC_MEMORY_USAGE_TIP_CHECK))->GetCheck() != 0);
m_data.memory_usage_tip.enable = (IsDlgButtonChecked(IDC_MEMORY_USAGE_TIP_CHECK) != 0);
SetControlEnable();
}
@@ -515,7 +560,7 @@ void CGeneralSettingsDlg::OnBnClickedOpenConfigPathButton()
void CGeneralSettingsDlg::OnBnClickedShowAllConnectionCheck()
{
// TODO: 在此添加控件通知处理程序代码
m_data.show_all_interface = (((CButton*)GetDlgItem(IDC_SHOW_ALL_CONNECTION_CHECK))->GetCheck() != 0);
m_data.show_all_interface = (IsDlgButtonChecked(IDC_SHOW_ALL_CONNECTION_CHECK) != 0);
SetControlEnable();
}
@@ -751,13 +796,13 @@ void CGeneralSettingsDlg::OnBnClickedResetAutoRunButton()
//先删除开机自动运行
theApp.SetAutoRunByRegistry(false);
theApp.SetAutoRunByTaskScheduler(false);
if (!theApp.SetAutoRun(true)) //重新设置开机自动运行
if (!theApp.SetAutoRun(true, m_data.auto_run_by_task_scheduler)) //重新设置开机自动运行
{
MessageBox(CCommon::LoadText(IDS_SET_AUTO_RUN_FAILED_WARNING), NULL, MB_ICONWARNING | MB_OK);
return;
}
//获取开机自动运行的路径
bool auto_run = theApp.GetAutoRun(&m_auto_run_path);
bool auto_run = theApp.GetAutoRun(&m_auto_run_path, m_data.auto_run_by_task_scheduler);
//重新勾选“开机自动运行”复选框
CheckDlgButton(IDC_AUTO_RUN_CHECK, auto_run);
//更新鼠标提示
@@ -769,3 +814,17 @@ void CGeneralSettingsDlg::OnEnChangeMonitorSpanEdit()
{
m_data.monitor_time_span = m_monitor_span_edit.GetValue();
}
void CGeneralSettingsDlg::OnBnClickedAutoRunMethodRegestryRadio()
{
m_data.auto_run_by_task_scheduler = false;
m_auto_run_modified = true;
SetControlEnable();
}
void CGeneralSettingsDlg::OnBnClickedAutoRunMethodTaskScheduleRadio()
{
m_data.auto_run_by_task_scheduler = true;
m_auto_run_modified = true;
SetControlEnable();
}
+3
View File
@@ -103,4 +103,7 @@ public:
afx_msg void OnBnClickedResetAutoRunButton();
afx_msg void OnEnChangeMonitorSpanEdit();
protected:
public:
afx_msg void OnBnClickedAutoRunMethodRegestryRadio();
afx_msg void OnBnClickedAutoRunMethodTaskScheduleRadio();
};
+48 -41
View File
@@ -634,53 +634,60 @@ UINT CTrafficMonitorApp::InitOpenHardwareMonitorLibThreadFunc(LPVOID lpParam)
return 0;
}
bool CTrafficMonitorApp::SetAutoRun(bool auto_run)
bool CTrafficMonitorApp::SetAutoRun(bool auto_run, bool task_scheduler)
{
//不含温度监控的版本使用添加注册表项的方式实现开机自启动
#ifdef WITHOUT_TEMPERATURE
return SetAutoRunByRegistry(auto_run);
#else
//包含温度监控的版本使用任务计划的方式实现开机自启动
return SetAutoRunByTaskScheduler(auto_run);
#endif
}
bool CTrafficMonitorApp::GetAutoRun(wstring* auto_run_path)
{
if (auto_run_path != nullptr)
auto_run_path->clear();
//不含温度监控的版本使用添加注册表项的方式实现开机自启动
#ifdef WITHOUT_TEMPERATURE
CRegKey key;
if (key.Open(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Run")) != ERROR_SUCCESS)
if (task_scheduler)
{
//打开注册表“Software\\Microsoft\\Windows\\CurrentVersion\\Run”失败,则返回false
return false;
}
wchar_t buff[256];
ULONG size{ 256 };
if (key.QueryStringValue(APP_NAME, buff, &size) == ERROR_SUCCESS) //如果找到了“TrafficMonitor”键
{
if (auto_run_path != nullptr)
{
//保存路径
*auto_run_path = buff;
//去掉前后的引号
if (auto_run_path->front() == L'\"')
*auto_run_path = auto_run_path->substr(1);
if (auto_run_path->back() = L'\"')
auto_run_path->pop_back();
}
return (m_module_path_reg == buff); //如果“TrafficMonitor”的值是当前程序的路径,就返回true,否则返回false
//使用任务计划的方式设置开机自启动
return SetAutoRunByTaskScheduler(auto_run);
}
else
{
return false; //没有找到“TrafficMonitor”键,返回false
//使用添加注册表项的方式实现开机自启动
return SetAutoRunByRegistry(auto_run);
}
}
bool CTrafficMonitorApp::GetAutoRun(wstring* auto_run_path, bool task_scheduler)
{
if (auto_run_path != nullptr)
auto_run_path->clear();
if (task_scheduler)
{
//使用任务计划的方式实现开机自启动
return is_auto_start_task_active_for_this_user(auto_run_path);
}
else
{
//使用添加注册表项的方式实现开机自启动
CRegKey key;
if (key.Open(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Run")) != ERROR_SUCCESS)
{
//打开注册表“Software\\Microsoft\\Windows\\CurrentVersion\\Run”失败,则返回false
return false;
}
wchar_t buff[256];
ULONG size{ 256 };
if (key.QueryStringValue(APP_NAME, buff, &size) == ERROR_SUCCESS) //如果找到了“TrafficMonitor”键
{
if (auto_run_path != nullptr)
{
//保存路径
*auto_run_path = buff;
//去掉前后的引号
if (auto_run_path->front() == L'\"')
*auto_run_path = auto_run_path->substr(1);
if (auto_run_path->back() = L'\"')
auto_run_path->pop_back();
}
return (m_module_path_reg == buff); //如果“TrafficMonitor”的值是当前程序的路径,就返回true,否则返回false
}
else
{
return false; //没有找到“TrafficMonitor”键,返回false
}
}
#else
//包含温度监控的版本使用任务计划的方式实现开机自启动
return is_auto_start_task_active_for_this_user(auto_run_path);
#endif
}
bool CTrafficMonitorApp::SetAutoRunByRegistry(bool auto_run)
+2 -2
View File
@@ -130,8 +130,8 @@ public:
static UINT CheckUpdateThreadFunc(LPVOID lpParam);
static UINT InitOpenHardwareMonitorLibThreadFunc(LPVOID lpParam);
bool SetAutoRun(bool auto_run);
bool GetAutoRun(wstring* auto_run_path); //判断是否开机自动进行,如果是,将开机自动运行的路径写入auto_run_path
bool SetAutoRun(bool auto_run, bool task_scheduler);
bool GetAutoRun(wstring* auto_run_path, bool task_scheduler); //判断是否开机自动进行,如果是,将开机自动运行的路径写入auto_run_path
bool SetAutoRunByRegistry(bool auto_run); //通过注册表实现开机自启动
bool SetAutoRunByTaskScheduler(bool auto_run); //通过任务计划实现开机自启动
Binary file not shown.
+1 -1
View File
@@ -786,7 +786,7 @@ void CTrafficMonitorDlg::ApplySettings(COptionsDlg& optionsDlg)
if (optionsDlg.m_tab3_dlg.IsAutoRunModified())
{
if (!theApp.SetAutoRun(theApp.m_general_data.auto_run))
if (!theApp.SetAutoRun(theApp.m_general_data.auto_run, theApp.m_general_data.auto_run_by_task_scheduler))
MessageBox(CCommon::LoadText(IDS_SET_AUTO_RUN_FAILED_WARNING), NULL, MB_ICONWARNING | MB_OK);
}
+5 -1
View File
@@ -208,7 +208,7 @@ IDS_SHOW_NET_SPEED_GRAPH_TIP = "Display net speed indicator on upload, download
IDS_REFRESH_CONNECTION_LIST= "Refresh connection list"
IDS_HARDWARE_MONITOR_INIT_FAILED = "Hardware monitoring function failed to initialize, hardware monitoring will not be available!"
IDS_HARDWARE_INFO_ACQUIRE_FAILED_ERROR = "Error getting hardware monitoring data!"
IDS_AUTO_RUN_METHOD_REGESTRY= "Auto-run mode : Registry"
IDS_AUTO_RUN_METHOD_REGESTRY= "Auto-run mode: Registry"
IDS_AUTO_RUN_METHOD_TASK_SCHEDULE= "Auto-run mode: Task schedule"
IDS_PATH = "Path"
IDS_SET_AUTO_RUN_FAILED_WARNING= "Set auto-run at start up failed!"
@@ -263,8 +263,12 @@ TXT_APPLICATION_SETTINGS = "Application Settings"
TXT_CHECK_UPDATE = "Check for update at startup"
TXT_CHECK_NOW = "&Check now"
TXT_UPDATE_SOURCE = "Update source:"
TXT_AUTO_RUN = "Auto run"
TXT_AUTO_RUN_CHECK = "Auto run when Windows starts"
TXT_RESET_AUTO_RUN_BUTTON = "Reset autorun"
TXT_AUTO_RUN_METHOD = "Auto-run mode:"
TXT_AUTO_RUN_METHOD_REGESTRY= "Registry"
TXT_AUTO_RUN_METHOD_TASK_SCHEDULE= "Task schedule (Administrator permission required)"
TXT_LANGUAGE = "Language:"
TXT_CONFIGURATION_AND_DATA_FILES = "Configuration and data files"
TXT_SAVE_TO_APPDATA_RADIO = "Save to Appdata directory"
@@ -263,9 +263,13 @@ TXT_APPLICATION_SETTINGS = "应用程序设置"
TXT_CHECK_UPDATE = "启动时检查更新"
TXT_CHECK_NOW = "立即检查(&C)"
TXT_UPDATE_SOURCE = "更新源:"
TXT_AUTO_RUN = "开机自动运行"
TXT_AUTO_RUN_CHECK = "开机时自动运行"
TXT_RESET_AUTO_RUN_BUTTON = "重新设置开机自动运行"
TXT_LANGUAGE = "语言:"
TXT_AUTO_RUN_METHOD = "开机自动运行方式:"
TXT_AUTO_RUN_METHOD_REGESTRY= "注册表"
TXT_AUTO_RUN_METHOD_TASK_SCHEDULE= "任务计划(需要管理员权限)"
TXT_LANGUAGE = "语言:"
TXT_CONFIGURATION_AND_DATA_FILES = "配置和数据文件"
TXT_SAVE_TO_APPDATA_RADIO = "保存到 Appdata 目录"
TXT_SAVE_TO_PROGRAM_DIR_RADIO = "保存到程序所在目录"
@@ -263,9 +263,13 @@ TXT_APPLICATION_SETTINGS = "應用程式設定"
TXT_CHECK_UPDATE = "啟動時檢查更新"
TXT_CHECK_NOW = "立即檢查(&C)"
TXT_UPDATE_SOURCE = "更新來源:"
TXT_AUTO_RUN = "開機自動執行"
TXT_AUTO_RUN_CHECK = "開機時自動執行"
TXT_RESET_AUTO_RUN_BUTTON = "重新設定開機自動執行"
TXT_LANGUAGE = "語言:"
TXT_AUTO_RUN_METHOD = "開機自動執行方式:"
TXT_AUTO_RUN_METHOD_REGESTRY= "登錄檔"
TXT_AUTO_RUN_METHOD_TASK_SCHEDULE= "工作排程(需要管理員許可權)"
TXT_LANGUAGE = "語言:"
TXT_CONFIGURATION_AND_DATA_FILES = "設定檔和資料檔"
TXT_SAVE_TO_APPDATA_RADIO = "儲存到 Appdata 目錄"
TXT_SAVE_TO_PROGRAM_DIR_RADIO = "儲存到程式所在目錄"
+3 -1
View File
@@ -344,6 +344,8 @@
#define IDC_GPU_TEMP_TIP_EDIT 1217
#define IDC_HDD_TIP_EDIT 1218
#define IDC_MBD_TEMP_TIP_EDIT 1219
#define IDC_AUTO_RUN_METHOD_REGESTRY_RADIO 1220
#define IDC_AUTO_RUN_METHOD_TASK_SCHEDULE_RADIO 1221
#define ID_32771 32771
#define ID_NETWORK_INFO 32772
#define ID_32773 32773
@@ -466,7 +468,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 349
#define _APS_NEXT_COMMAND_VALUE 33666
#define _APS_NEXT_CONTROL_VALUE 1220
#define _APS_NEXT_CONTROL_VALUE 1221
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif