如果一个实例已经运行,重新打开一个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()方法)在这一点上。我真的不知道这是如何实现的。

+0

首先 - 您将Qt与WinAPI混合。你是想用Qt-way或WinAPI的方式来做到这一点? – jaskmar

+0

看到这个:http://doc.qt.io/qt-5/qsystemtrayicon.html – eyllanesc

+0

@jaskmar很好,没有太多的经验,我很难说我想以哪种方式去做。我不知道如何做到这一点,也不知道它是否可以同时实现。我想象一下,应用程序的实例必须由WinAPI完成,但是通过Qt显示窗口? – madasionka

我找到了答案在这里: How I show application when open application again Qt

QLocalServerQLocalSocket为我工作。

检出QSystemSemaphore这可以通过多个进程(您的类的实例)访问。另外这篇文章可能会有所帮助:Inter-Process Communication in Qt

请注意,混合QtWinAPI不是一个好主意,当它不是必要的。