【问题标题】:Run only single instance of flutter desktop application仅运行 Flutter 桌面应用程序的单个实例
【发布时间】:2021-07-17 20:32:07
【问题描述】:

我正在开发 Flutter 桌面应用程序。我只想执行应用程序的单个实例。但目前它允许我运行多个实例。怎样才能让这个应用程序只运行一个 .exe 文件?

【问题讨论】:

  • 对此有何想法?我想知道如何做同样的功能
  • 我在 C++ 中使用互斥锁做到了这一点。我们必须在 win32_window.cpp 中编写代码来限制应用程序的单个实例
  • 能否分享部分代码?我正在为 Flutter 上缺乏有关本机桌面的信息而苦苦挣扎
  • 帖子随答案一起更新。
  • @Dev94 请不要编辑您的问题来自行回答。只需发布一个答案。我从您的代码中删除了自我回答,并为您制作了一个社区 wiki 回答。如果您想从您的回答中赢得声誉,请自己发布一个。当你这样做时请告诉我,我可以删除社区 wiki。

标签: dart flutter-desktop


【解决方案1】:

我收到编译错误。

解决方法是 if 块末尾的这一行。

ReleaseMutex(hMutexHandle);

【讨论】:

    【解决方案2】:

    这是默认 Flutter Windows 应用程序属性中的自定义,因此我们必须为此目的使用 C++ 编写代码。使用 Mutex 可以实现单个窗口应用程序实例:

    HANDLE hMutexHandle=CreateMutex(NULL, TRUE, L"my.mutex.name");
    HWND handle=FindWindowA(NULL, "Test Application");
    
      if (GetLastError() == ERROR_ALREADY_EXISTS)
      {
         WINDOWPLACEMENT place = { sizeof(WINDOWPLACEMENT) };
             GetWindowPlacement(handle, &place);
             switch(place.showCmd)
             {
                  case SW_SHOWMAXIMIZED:
                      ShowWindow(handle, SW_SHOWMAXIMIZED);
                      break;
                  case SW_SHOWMINIMIZED:
                      ShowWindow(handle, SW_RESTORE);
                      break;
                  default:
                      ShowWindow(handle, SW_NORMAL);
                      break;
              }
              SetWindowPos(0, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE);
              SetForegroundWindow(handle);
              return 0;
      }
    

    打开 win32_window.cpp 文件并在 CreateAndShow() 方法的开头添加此代码 sn -p 会将应用程序限制为单个实例。

    【讨论】:

    • 对不起?它不适合我。
    猜你喜欢
    • 2014-07-06
    • 1970-01-01
    • 2018-04-10
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 2011-10-19
    • 2015-01-31
    相关资源
    最近更新 更多