在main函数中添加核心代码接口 如下
void SetSystemSemaphoreEnv()
{
QSystemSemaphore Sema(“AvoSee”, 1, QSystemSemaphore::Open);
Sema.acquire();// SharedMemory
static QSharedMemory st_SharedMem("ESSystemObject");
if (!st_SharedMem.create(1))
{
Sema.release();
QString strProcessName = "AvoSee.exe";
QProcess pcTaskList;
pcTaskList.start("tasklist", QStringList() << "-fi" << "imagename eq " + strProcessName);
pcTaskList.waitForFinished();
QString strRec = QString::fromLocal8Bit(pcTaskList.readAllStandardOutput());
if (strRec.contains("PID"))
{
HWND handle = FindWindow(nullptr, TEXT("EvoSee"));基于windows Api 获取程序窗口的句柄
if (handle == nullptr)
return;
ShowWindow(handle, SW_RESTORE);//激活窗口,参数:SW_RESTORE,以程序之前的大小显示,可以根据需要设置其他标识,如SW_MAXIMIZE
SetForegroundWindow(handle);//激活窗口在桌面最前面
}
//CommonMessageBox::information(NULL, "提示", "AvoSee程序已启动");//弹出提示框 注意:该提示应该在 qApp->quit();之前,否则提示框将会一闪而过
exit(0);
}
Sema.release();
}
缺点:
就是界面出现弹框时 如果没有释放掉资源 进入最小化 则会导致再次点击软件 无法show出来