如何实现当一个程序的进程已经在运行的时候,你再打开此程序时,弹出已运行实例的界面
如何实现当一个程序的进程已经在运行的时候,你再打开此程序时,弹出已运行实例的界面:
想象一副场景,也许能让你更好的理解这个问题的确切意思:
当你打开一个程序A,并将它最小化到系统托盘,时间久了用户可能忘了此程序还开着,于是他想要用到程序A时,又去点击桌面上程序A的快捷键图标,试图打开程序A,此时我想做的是,直接弹出正在运行并且已经最小化在系统托盘里的程序A的实例。
SharedMemoryObject singleSMO("theProcess");
if (!singleSMO.beCreated())
{
这里添加代码弹出已经运行的程序界面
return 0;
}
[解决办法]
//运行唯一实例 QSystemSemaphore sema("YourName",1,QSystemSemaphore::Open); sema.acquire();// 在临界区操作共享内存 SharedMemory QSharedMemory mem("dvd字幕校对工具");// 全局对象名 if (!mem.create(1))// 如果全局对象以存在则退出 { HWND handle = FindWindow(L"QWidget",L"YourAppName"); if (handle == NULL) { int x= 0; } ShowWindow(handle,SW_MAXIMIZE); SetForegroundWindow(handle); sema.release();// 如果是 Unix 系统,会自动释放。 return 0; } sema.release();// 临界区