如果一个实例已经运行,重新打开一个Qt桌面应用程序
问题描述:
我会尽我所能来解释我的问题,但我对这一切都很陌生。我有一个Windows桌面Qt应用程序。只能运行一个应用程序实例。这通过main.cpp
中的MSDN互斥量句柄来保证。如果一个实例已经运行,重新打开一个Qt桌面应用程序
HANDLE mutex = CreateMutex(NULL, TRUE, lpName);
if (mutex == NULL || GetLastError() == ERROR_ALREADY_EXISTS){
QMessageBox::information(0, "Info", "Application is already running.");
return 0;
}
现在我想要做的是重新打开正在运行的应用程序,如果有人试图打开应用程序。通过重新打开,我的意思是show()
MainWindow
这可能是隐藏的(通过hide()
方法)在这一点上。我真的不知道这是如何实现的。
答
检出QSystemSemaphore这可以通过多个进程(您的类的实例)访问。另外这篇文章可能会有所帮助:Inter-Process Communication in Qt。
请注意,混合Qt
与WinAPI
不是一个好主意,当它不是必要的。
首先 - 您将Qt与WinAPI混合。你是想用Qt-way或WinAPI的方式来做到这一点? – jaskmar
看到这个:http://doc.qt.io/qt-5/qsystemtrayicon.html – eyllanesc
@jaskmar很好,没有太多的经验,我很难说我想以哪种方式去做。我不知道如何做到这一点,也不知道它是否可以同时实现。我想象一下,应用程序的实例必须由WinAPI完成,但是通过Qt显示窗口? – madasionka