[QT]设置程序仅打开一个,再打开就唤醒已打开程序的窗口

需求:speedcrunch 这个软件是开源的计算器软件。配合launch类软件使用时,忘记关闭就经常很多窗口,强迫症,从网上搜索对版本进行了修改。

cpp 复制代码
#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已经添加,则在编译文件中未改动。

效果:

相关推荐
yw00yw23 分钟前
常见的设计模式
开发语言·javascript·设计模式
我不是星海1 小时前
RabbitMQ基础入门实战
java·开发语言
jingfeng5141 小时前
C++多态
开发语言·c++
kyle~2 小时前
C/C++---浮点数与整形的转换,为什么使用sqrt函数时,要给参数加上一个极小的小数(如1e-6)
c语言·开发语言·c++
暖苏2 小时前
python-多线程(笔记)(持续更新)
大数据·开发语言·python
The Chosen One9853 小时前
红黑树下探玄机:C++ map&multimap 的幕后之旅
开发语言·c++
Evand J3 小时前
【MATLAB例程】水下机器人长基线(LBL)定位,用于三维轨迹,使用EKF滤波,融合LBL和IMU,4个锚点(长基线基站数=4),附下载链接
开发语言·matlab·机器人
林内克思3 小时前
inline内联函数
java·开发语言·算法
博睿谷IT99_3 小时前
OSPF 的工作过程、Router ID 机制、报文结构
开发语言·网络·华为·智能路由器·网络工程师·华为认证·数据通信
piikee4 小时前
php内存缓存插件yac的安装配置--平替apcu,多进程共享内存
开发语言·缓存·php·yac·php扩展·php内存缓存·apcu平替