diff --git a/client/pubspec.yaml b/client/pubspec.yaml index 9cca27e..2c93029 100644 --- a/client/pubspec.yaml +++ b/client/pubspec.yaml @@ -1,7 +1,7 @@ name: pangolin_vpn description: 穿山甲 · Pangolin — 极简、稳定、跨平台网络加速客户端。 publish_to: "none" -version: 1.0.28+29 +version: 1.0.29+30 environment: sdk: ^3.5.0 diff --git a/client/windows/installer/pangolin.iss b/client/windows/installer/pangolin.iss index 3681f49..032422a 100644 --- a/client/windows/installer/pangolin.iss +++ b/client/windows/installer/pangolin.iss @@ -3,7 +3,7 @@ ; 前置: 先在 client/ 跑 `flutter build windows`(Release),产物在 ; ..\..\build\windows\x64\runner\Release #define MyAppName "穿山甲 Pangolin" -#define MyAppVersion "1.0.28" +#define MyAppVersion "1.0.29" #define MyAppPublisher "Pangolin" #define MyAppExeName "pangolin_vpn.exe" #define BuildDir "..\..\build\windows\x64\runner\Release" diff --git a/client/windows/runner/flutter_window.cpp b/client/windows/runner/flutter_window.cpp index 955ee30..982fc49 100644 --- a/client/windows/runner/flutter_window.cpp +++ b/client/windows/runner/flutter_window.cpp @@ -1,6 +1,7 @@ #include "flutter_window.h" #include +#include #include "flutter/generated_plugin_registrant.h" @@ -27,9 +28,16 @@ bool FlutterWindow::OnCreate() { RegisterPlugins(flutter_controller_->engine()); SetChildContent(flutter_controller_->view()->GetNativeWindow()); - flutter_controller_->engine()->SetNextFrameCallback([&]() { - this->Show(); - }); + // 开机自启(命令行带 --autostart):跳过首帧的 Show(),窗口保持隐藏到托盘。 + // 窗口以 WS_OVERLAPPEDWINDOW(不含 WS_VISIBLE)创建,本就隐藏,只靠这个回调显示; + // 不注册回调即一直不显示。否则首帧回调的 Show() 会覆盖 Dart 侧的 hide(),窗口仍弹出。 + const wchar_t* cmd = GetCommandLineW(); + const bool autostart = cmd != nullptr && wcsstr(cmd, L"--autostart") != nullptr; + if (!autostart) { + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + } // Flutter can complete the first frame before the "show window" callback is // registered. The following call ensures a frame is pending to ensure the