feat: only allow one windows instance (#2879)

Co-authored-by: vedon <vedon.fu@gmail.com>
This commit is contained in:
Nathan.fooo 2023-06-22 13:25:01 +08:00 committed by GitHub
parent 99cfda0a5c
commit f1bfcb6066
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -8,6 +8,16 @@
int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
_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
// new console when running with a debugger.
if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent())
@ -43,5 +53,6 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
}
::CoUninitialize();
ReleaseMutex(hMutexInstance);
return EXIT_SUCCESS;
}