运行 只有一个 flutter 桌面应用实例
Run only single instance of flutter desktop application
我正在开发 Flutter 桌面应用程序。我只想执行应用程序的单个实例。但目前它允许我 运行 多个实例。如何只允许此应用程序的一个 .exe 文件 运行?
我遇到编译错误。
解决方案是 if 块末尾的这一行。
ReleaseMutex(hMutexHandle);
这是默认 flutter windows 应用程序属性中的自定义,因此我们必须为此目的使用 C++ 进行编码。单个 window 应用程序实例可以使用 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()
方法的开头添加此代码片段会将应用程序限制为单个实例。
我正在开发 Flutter 桌面应用程序。我只想执行应用程序的单个实例。但目前它允许我 运行 多个实例。如何只允许此应用程序的一个 .exe 文件 运行?
我遇到编译错误。
解决方案是 if 块末尾的这一行。
ReleaseMutex(hMutexHandle);
这是默认 flutter windows 应用程序属性中的自定义,因此我们必须为此目的使用 C++ 进行编码。单个 window 应用程序实例可以使用 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()
方法的开头添加此代码片段会将应用程序限制为单个实例。