Qt双击桌面快捷方式激活并使程序窗口置于最前端
方法二转载: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双击桌面快捷方式激活并使程序窗口置于最前端相关推荐
- win10计算机从桌面消失了,Windows10家庭版程序窗口在桌面上消失了解决方法
相信大家对于电脑非常不陌生吧,当你遇到Win10程序窗口桌面上消失了怎么办这个问题该怎么解决吗?不知道了吧,接下来小编就以程序窗口时所遇到的Win10程序窗口桌面上消失了怎么办问题来给大家讲讲,看看小 ...
- 怎样将计算机添加桌面快捷方式,Win10系统下如何将程序快捷方式添加到桌面上?【图文教程】...
虽然win10系统是一个比较新的操作系统,但是还是有不少用户已经开始尝试使用.最近,有些win10用户向小编反映自己不小心把系统桌面上面的快捷方式删除了,不知道该如何重新将该程序的快捷方式添加到桌面上 ...
- win10计算机桌面快捷方式,Win10程序快捷方式添加到桌面上的两种方法
在使用电脑的时候一般都是把程序快捷方式添加到电脑桌面上,因为打开电脑面对的就是桌面.在桌面打开程序也是最快的.那么在Win10系统中如何把应用程序 快捷方式 添加到桌面上呢?方法有两种,这里就为大家一 ...
- 命令行修改桌面快捷方式以管理员权限运行
在做PC端打包的时候,发现程序在Win10 系统中安装后,双击桌面快捷方式,不能正常访问安装目录中的一些文件,后来发现必须以管理员权限运行,这个就有点糟心了,程序交付给客户之后,总不能每次都让客户选中 ...
- w ndows7启动后没有图标,Windows7下双击桌面图标无法打开怎么解决?
为了操作方便,用户会在Win7桌面上创建程序图标,只要双击桌面图标就能快速打开程序,可近日有用户双击桌面图标无法打开,这是怎么回事?来看下小编是怎么解决的吧. 解决方法一: 1.首先双击打开win7桌 ...
- 使用QT制作桌面小工具(一)
制作目标: 实现一个桌面工具 制作内容: 1.显示图片 2.为窗口添加 ico 图标 3.隐藏窗口边窗 4.窗口置顶 5.实现拖拽操作 6.实现系统托盘.托盘菜单 开发环境 QT:5.14.1 MSV ...
- Windows XP桌面快捷方式失效
现象: 当双击桌面快捷方式时,变成查看快捷方式的"属性" 方法: 保存以下脚本为"link.reg"的注册表修改文件,然后双击应用. Windows Regis ...
- 【Qt】Qt 开发桌面程序 ( Qt 版本 5.14.2 | 编辑 Qt 桌面按钮控件 | 修改按钮文本 | 为按钮添加点击事件 | 系统调用 | 去掉系统调用命令窗口 )
文章目录 一.添加按钮控件 二.修改按钮文本 三.为按钮添加点击事件 ( 弹出对话框 ) 四.为按钮添加点击事件 ( 打开记事本 ) 五.为按钮添加点击事件 ( 打开计算器 ) 六.去掉系统调用时弹出 ...
- 计算机上没有系统软件应用软件也一样能使用,2010判断题一般双击桌面上的程序图标可以打开该程序...
一般双击桌面上的程序图标可以打开该程序 在Windows中,回收站和剪贴板都是硬盘上的一块区域.B 计算机病毒是指能传染给用户的生物病毒.B 计算机病毒可通过软盘.光盘.网络传播.A Windows允 ...
最新文章
- 解读 | 2019 年 10 篇计算机视觉精选论文(上)
- 速算C语言程序设计,C语言程序设计课程设计-速算24.doc
- DataSnap 2009 系列之二 (方法篇)
- spring boot第八讲
- 关于dlg和pro的问题
- oracle的环境配置-基本配置
- UNIX环境高级编程——pthread_create的问题
- android 瀑布流效果 保存地址
- Dubbo面试 - dubbo的工作原理
- 一步一步写算法(之线性堆栈)
- 全国自然保护区生态功能区分布数据
- 微信群怎么添加二狗机器人?
- WPS中JS宏简单运用
- macbook安装linux分区,如何在MacBook Pro Retina上安装Linux
- 在linux下成功写Bingo游戏
- 判断距离1970年1月1日的天数
- 外包公司值不值得去?外包公司的面试特点
- spring cloud 资源服务器授权配置
- Linux系统下的hadoop常用命令
- 怎样来实现流量削峰方案
热门文章
- 云痕大数据 家长登录_云痕家长app
- sparkstreaming监听hdfs目录_flume kafka和sparkstreaming整合
- python中的几种copy用法_Python3中copy模块常用功能及其他几种copy方式比较
- contains不区分大小写_趣读丨2020祝福语怎么发才不像是群发?全网独一份的模板安排上了!...
- php数组函数及用法,php数组函数 in_array 的用法及注意事项
- Python面试题:如何判断字典a在字典b
- python实现两数之和
- 不要再问我Python2和Python3的Unicode 问题啦!
- mysql表jiayi_MySQL Memory存储引擎:优势及性能测试
- 二级c语言努力学可以过吗,考过计算机二级C语言一些感想和建议