方法二转载:https://blog.csdn.net/winstonyi/article/details/108737600

qt在桌面应用程序中,会存在一个问题,官方示例中也无提及,桌面快捷方式,唤醒已经最小化的窗口,因为大部分情况下,不可能让窗口一直保持在前台,最小化后,在需要时有必须让其快速显示,windows托盘图标在某些情况下,受图标缓冲影响,就是不显示!最直接和可靠的渠道就是,桌面快捷方式和开始菜单的快捷方式,也比较符合大部分普通用户习惯!

方法一:

起初遇到该问题,我们测试,直接双击桌面快捷方式,默认是相当于“双开”,也就说打开同样的程序的第二个,对于有端口号等应用程序,明显会出错,因为都被一个占了,和同事试了各种方法,最多只能用QSharedMemory忽略再次打开这个动作,保证无法重复打开,无法唤醒已经最小化到托盘的窗口。

后来无意间,在现场商量到了一个实现方式,是通过udp消息唤醒窗口。每次打开程序,默认给指定端口,发出特定消息,已经运行的应用程序收到该消息后,主动showwindow,实现了,打开桌面快捷方式,唤醒已经最小化的窗口;

方法二:

博主Chervin(https://blog.csdn.net/winstonyi/article/details/108737600),在2020年9月开源了,新的方法,采用QSharedMemory方式,加上Window API函数操作程序,保证已打开程序不重复打开,并激活程序窗口到最前面。

仔细看其原理,应该是合理的解决方案。

可能qt的大多人对windows api并不熟悉,下为实现方法,可自行参考,

// Windouw API 依赖头文件
#include <windows.h>
#include <winbase.h>// Qt 依赖头文件
#include <QSystemSemaphore>
#include <QSharedMemory>
int main(int argc, char *argv[])
{// ......//.....其他代码/** 程序是否已经打开检测和激活并置于最前端控制 *///@ 1.首先判断程序是否已经打开QSystemSemaphore semaphore("BTSemap", 1);semaphore.acquire();QSharedMemory shareMemory("BTKey");//建立共享内存对象,BTKey为改程序设置的共享内存key值,用户根据自己需要设定bool isRunning =false;if (shareMemory.attach())//判断软件是否已经打开{isRunning = true;//已经打开}else{shareMemory.create(1);//软件未打开,则创建共享内存isRunning = false;}semaphore.release();//@ 2.软件已经打开,则将软件激活,并置于桌面最前面if (isRunning){//@ 将软件激活,显示在最前端QString wTitle = QString("TestProgram");//Qt创建的主MainWindow的 标题HWND handle = FindWindow(nullptr,wTitle.toLocal8Bit().toStdString().c_str());//基于windows Api 获取程序窗口的句柄if (handle == nullptr)//判断是否为空{return -1;}ShowWindow(handle, SW_RESTORE);//激活窗口,参数:SW_RESTORE,以程序之前的大小显示,可以根据需要设置其他标识,如SW_MAXIMIZESetForegroundWindow(handle);//激活窗口在桌面最前面return 1;}//@ 3.若程序未打开,则正常执行程序,如以下屏蔽的代码,正常启动主界面程序//TMainWindow w;//w.show();//int ret =  a.exec();return 0;
}

Qt双击桌面快捷方式激活并使程序窗口置于最前端相关推荐

  1. win10计算机从桌面消失了,Windows10家庭版程序窗口在桌面上消失了解决方法

    相信大家对于电脑非常不陌生吧,当你遇到Win10程序窗口桌面上消失了怎么办这个问题该怎么解决吗?不知道了吧,接下来小编就以程序窗口时所遇到的Win10程序窗口桌面上消失了怎么办问题来给大家讲讲,看看小 ...

  2. 怎样将计算机添加桌面快捷方式,Win10系统下如何将程序快捷方式添加到桌面上?【图文教程】...

    虽然win10系统是一个比较新的操作系统,但是还是有不少用户已经开始尝试使用.最近,有些win10用户向小编反映自己不小心把系统桌面上面的快捷方式删除了,不知道该如何重新将该程序的快捷方式添加到桌面上 ...

  3. win10计算机桌面快捷方式,Win10程序快捷方式添加到桌面上的两种方法

    在使用电脑的时候一般都是把程序快捷方式添加到电脑桌面上,因为打开电脑面对的就是桌面.在桌面打开程序也是最快的.那么在Win10系统中如何把应用程序 快捷方式 添加到桌面上呢?方法有两种,这里就为大家一 ...

  4. 命令行修改桌面快捷方式以管理员权限运行

    在做PC端打包的时候,发现程序在Win10 系统中安装后,双击桌面快捷方式,不能正常访问安装目录中的一些文件,后来发现必须以管理员权限运行,这个就有点糟心了,程序交付给客户之后,总不能每次都让客户选中 ...

  5. w ndows7启动后没有图标,Windows7下双击桌面图标无法打开怎么解决?

    为了操作方便,用户会在Win7桌面上创建程序图标,只要双击桌面图标就能快速打开程序,可近日有用户双击桌面图标无法打开,这是怎么回事?来看下小编是怎么解决的吧. 解决方法一: 1.首先双击打开win7桌 ...

  6. 使用QT制作桌面小工具(一)

    制作目标: 实现一个桌面工具 制作内容: 1.显示图片 2.为窗口添加 ico 图标 3.隐藏窗口边窗 4.窗口置顶 5.实现拖拽操作 6.实现系统托盘.托盘菜单 开发环境 QT:5.14.1 MSV ...

  7. Windows XP桌面快捷方式失效

    现象: 当双击桌面快捷方式时,变成查看快捷方式的"属性" 方法: 保存以下脚本为"link.reg"的注册表修改文件,然后双击应用. Windows Regis ...

  8. 【Qt】Qt 开发桌面程序 ( Qt 版本 5.14.2 | 编辑 Qt 桌面按钮控件 | 修改按钮文本 | 为按钮添加点击事件 | 系统调用 | 去掉系统调用命令窗口 )

    文章目录 一.添加按钮控件 二.修改按钮文本 三.为按钮添加点击事件 ( 弹出对话框 ) 四.为按钮添加点击事件 ( 打开记事本 ) 五.为按钮添加点击事件 ( 打开计算器 ) 六.去掉系统调用时弹出 ...

  9. 计算机上没有系统软件应用软件也一样能使用,2010判断题一般双击桌面上的程序图标可以打开该程序...

    一般双击桌面上的程序图标可以打开该程序 在Windows中,回收站和剪贴板都是硬盘上的一块区域.B 计算机病毒是指能传染给用户的生物病毒.B 计算机病毒可通过软盘.光盘.网络传播.A Windows允 ...

最新文章

  1. 解读 | 2019 年 10 篇计算机视觉精选论文(上)
  2. 速算C语言程序设计,C语言程序设计课程设计-速算24.doc
  3. DataSnap 2009 系列之二 (方法篇)
  4. spring boot第八讲
  5. 关于dlg和pro的问题
  6. oracle的环境配置-基本配置
  7. UNIX环境高级编程——pthread_create的问题
  8. android 瀑布流效果 保存地址
  9. Dubbo面试 - dubbo的工作原理
  10. 一步一步写算法(之线性堆栈)
  11. 全国自然保护区生态功能区分布数据
  12. 微信群怎么添加二狗机器人?
  13. WPS中JS宏简单运用
  14. macbook安装linux分区,如何在MacBook Pro Retina上安装Linux
  15. 在linux下成功写Bingo游戏
  16. 判断距离1970年1月1日的天数
  17. 外包公司值不值得去?外包公司的面试特点
  18. spring cloud 资源服务器授权配置
  19. Linux系统下的hadoop常用命令
  20. 怎样来实现流量削峰方案

热门文章

  1. 云痕大数据 家长登录_云痕家长app
  2. sparkstreaming监听hdfs目录_flume kafka和sparkstreaming整合
  3. python中的几种copy用法_Python3中copy模块常用功能及其他几种copy方式比较
  4. contains不区分大小写_趣读丨2020祝福语怎么发才不像是群发?全网独一份的模板安排上了!...
  5. php数组函数及用法,php数组函数 in_array 的用法及注意事项
  6. Python面试题:如何判断字典a在字典b
  7. python实现两数之和
  8. 不要再问我Python2和Python3的Unicode 问题啦!
  9. mysql表jiayi_MySQL Memory存储引擎:优势及性能测试
  10. 二级c语言努力学可以过吗,考过计算机二级C语言一些感想和建议