程序要求单实例运行,且如果第二次运行激活已存在的程序实例的窗口。
于是有了下面的这段代码。
QSystemSemaphore sema("sema", 1, QSystemSemaphore::Open);
sema.acquire();
QSharedMemory mem("memObject");
if (!mem.create(1)) {
HWND w = FindWindow(NULL, "Window Title");
if (w)
{
SetForegroundWindow(w);
ShowWindow(w, SW_SHOWNORMAL);
}
sema.release();
return 0;
}
sema.release();
神奇的是的Qt里,只写ShowWindow是不行的,如果窗口最小化后再从另一个实例中激活它,窗口上的控件得不到绘制。可能是Qt的消息处理函数进行了判断吧。而且必须得在ShowWindow之前调用SetForegroudWindow。
没有评论:
发表评论