Bläddra i källkod

feat: only allow one windows instance (#2879)

Co-authored-by: vedon <[email protected]>
Nathan.fooo 1 år sedan
förälder
incheckning
f1bfcb6066
1 ändrade filer med 11 tillägg och 0 borttagningar
  1. 11 0
      frontend/appflowy_flutter/windows/runner/main.cpp

+ 11 - 0
frontend/appflowy_flutter/windows/runner/main.cpp

@@ -8,6 +8,16 @@
 int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
 int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
                       _In_ wchar_t *command_line, _In_ int show_command)
                       _In_ wchar_t *command_line, _In_ int show_command)
 {
 {
+  HANDLE hMutexInstance = CreateMutex(NULL, TRUE, L"AppFlowyMutex");
+  HWND handle = FindWindowA(NULL, "AppFlowy");
+
+  if (GetLastError() == ERROR_ALREADY_EXISTS) {
+    WINDOWPLACEMENT place = { sizeof(WINDOWPLACEMENT) };
+    GetWindowPlacement(handle, &place);
+    ShowWindow(handle, SW_NORMAL);
+    return 0;
+  }
+
   // Attach to console when present (e.g., 'flutter run') or create a
   // Attach to console when present (e.g., 'flutter run') or create a
   // new console when running with a debugger.
   // new console when running with a debugger.
   if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent())
   if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent())
@@ -43,5 +53,6 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
   }
   }
 
 
   ::CoUninitialize();
   ::CoUninitialize();
+  ReleaseMutex(hMutexInstance);
   return EXIT_SUCCESS;
   return EXIT_SUCCESS;
 }
 }