需求:speedcrunch 这个软件是开源的计算器软件。配合launch类软件使用时,忘记关闭就经常很多窗口,强迫症,从网上搜索对版本进行了修改。
#include "gui/mainwindow.h"
#include <QCoreApplication>
#include <QApplication>
#include <QSharedMemory>
#include <QMessageBox>
#include <Windows.h>
#include <WinUser.h>
int main(int argc, char* argv[])
{
QApplication application(argc, argv);
static QSharedMemory *singleApp = new QSharedMemory("SingleApp");//创建“SingleApp”的共享内存块
if(!singleApp->create(1))//创建失败,说明已经有一个程序运行,
{
//弹出提示框注意:该提示应该在 qApp->quit();之前,否则提示框将会一闪而过
//QMessageBox::information(NULL,"tips","The program is already running");
QString name = "Qt5152QWindowIcon";//窗口的类名
QString windowname = "SpeedCrunch";//窗口标题名
HWND hwnd = FindWindow((LPCWSTR)name.unicode(),(LPCWSTR)windowname.unicode());//查找窗口句柄
if (hwnd == 0) {
QMessageBox::information(NULL,"tips","not find wind");
}
ShowWindow(hwnd, SW_RESTORE);//激活并置顶窗口,ShowWindow里面的参数可以网上搜一下,不同功能不同参数
SetForegroundWindow(hwnd);
qApp->quit();//退出当前程序
return -1;
}
QCoreApplication::setApplicationName("SpeedCrunch");
QCoreApplication::setOrganizationDomain("speedcrunch.org");
MainWindow window;
window.show();
application.connect(&application, SIGNAL(lastWindowClosed()), &application, SLOT(quit()));
return application.exec();
}
差异图下图:
findwindow的方法需要添加user32的库,因为speedcrunch已经添加,则在编译文件中未改动。
效果: