如何在 Qt 中打开和最小化外部应用程序到系统托盘

     2023-02-17     255

关键词:

【中文标题】如何在 Qt 中打开和最小化外部应用程序到系统托盘【英文标题】:How to open and minimize external app to system tray in Qt 【发布时间】:2019-04-06 06:59:58 【问题描述】:

QProcess 可以用来打开外部程序,但它总是会在所有其他窗口的前面打开一个应用程序。

有没有办法打开一个外部应用程序,然后将此打开的应用程序最小化/隐藏到系统托盘?

QString path = QString("external app path here").replace("/", "\\");

QProcess process;
process.start(path); //open the external app, but it will stay on top of other windows 
if (process.isOpen()) 
    //then minimize this app to system tray;

这(open and minimize external app to system tray)可以使用 Qt 方法实现吗?

如果 Qt 无法将打开的外部应用程序最小化到系统托盘。我必须使用 Windows API 吗?任何建议或示例代码将不胜感激。

【问题讨论】:

Nitpick:您的意思是 taskbarnotification area(任务栏的),而不是“托盘”。见devblogs.microsoft.com/oldnewthing/20030910-00/?p=42583 您可以通过 CreateProcess()、STARTUPINFO.wShowWindow 成员向进程提供建议。这有点违背了使用 Qt 的意义,您可以通过创建进程的快捷方式(.lnk 文件)并改为启动该进程来领先。请注意,这只是一个建议,许多程序会忽略它。您会很快从快捷方式的行为方式中找出答案。 【参考方案1】:

这不应该特定于 Qt。也许Qt session management 可能是相关的。

这是window manager 和desktop environment 的问题。两者都是由(非常广泛地说)您的“操作系统”提供的,并且不依赖于使用 Qt 的特定进程。

系统托盘属于桌面环境。使用 Qt 的特定进程没有理由将其最小化。系统托盘的最小化是桌面环境的业务(不是一个特定的 Qt 应用程序)。我认为您的应用程序没有理由这样做(请记住,您的用户还可以运行其他应用程序,这些应用程序对他来说比您的应用程序更重要,并且还与系统托盘交互或需要使用系统托盘)。

当然,Qt 提供了一个 API 来与窗口管理器和桌面环境交互

PS。在 Linux 上,Qt 应用程序和窗口管理器或桌面环境之间的约定记录在 EWMH 和 ICCCM 中。您需要找到适用于 Windows 的等价物。我从未使用过 Windows,所以我不认识它们。在 Linux 上,可以使用 Qt 编写窗口管理器。

【讨论】:

如您所说,Qt 提供了一些与 Windows 管理器和桌面环境交互的方法。你知道我如何使用 Qt 方法实现这一点吗?因为我对系统API不熟悉。 Qt 文档写得非常好,恕我直言。所以请仔细阅读。您可能需要阅读 Qt 特定于 Windows 的部分。我从未读过它,因为我从未使用过 Windows。

如何制作仅在系统托盘中运行的 .NET Windows 窗体应用程序?

】如何制作仅在系统托盘中运行的.NETWindows窗体应用程序?【英文标题】:HowcanImakea.NETWindowsFormsapplicationthatonlyrunsintheSystemTray?【发布时间】:2010-11-0223:18:22【问题描述】:我需要做什么才能使WindowsForms应用程序能够在系统托盘中... 查看详情

vc如何实现关闭时最小化到托盘

点击X时最小化到托盘,最好给出完整的源代码。你给的这个答案,我已经在网上看过了,你的ToTray()是什么时候调用的尤其上你说的第二步,程序怎么就最小化到托盘区了我的邮箱:zhangjun_fy@163.com谢谢参考技术A一、托盘简介... 查看详情

如何将我的桌面 Flutter 应用最小化到系统托盘?

...2019-10-3008:49:33【问题描述】:我正在构建一个Flutter桌面应用程序,我希望让应用程序在系统托盘上继续运行,而不是仅仅关闭它。【问题讨论】:【参考方案1】:在处理您的查询时,我发现以下链接可能会有所帮助https://github.c... 查看详情

最小化到系统托盘区是啥意思?

...的快捷键没改过的话可以通过ctrl+alt+z打开参考技术A就是最小化到通知区域,程序没关闭,只是最小化了,而且放在显示时间那的“通知区域” 参考技术B就是最小化到屏幕右下角那里,那个区域就是系统托盘了。 查看详情

delphitrayicon控件,如何实现窗口最小化的时候到系统托盘(代码片段)

...g:TWMSysCommand);begininherited;ifMsg.CmdType=SC_MINIMIZEthen//窗口收到最小化消息beginApplication.Minimize;//最小化程序ShowWindow(Application.Handle,SW_HIDE);//隐藏任务栏图标end;end;记得在TrayIcon的单击或双击事件中还原窗口,否则你就看不见程序了,只... 查看详情

如何把程序最小化到托盘图标

参数及返回值说明:dwMessage:[输入参数]说明要执行的动作。动作的可选值如下:NIM_ADD增加一个图标到托盘区NIM_DELETE从托盘区删除一个图标NIM_MODIFY修改图标NIM_SETFOCUS将焦点(Focus)返回托盘区。这个消息通常在托盘区图标完成... 查看详情

我用c#编写的winform最小化到托盘了

...好把代码粘进VS里面看,否则你会头大的///<summary>///应用程序的主入口点。///</summary>[STAThread]staticvoidMain()//在窗体启动之前就要做判断处理//Foreach系统中的所有进程foreach(ProcesspinProcess.GetProcesses())//这里面是简单的判断,... 查看详情

winform之窗口最小化到托盘及右键图标显示菜单

日常开发有时候需要实现窗口最小化到系统托盘,本文就来讲讲该如何实现winfrom最小化到系统托盘,本例子基于VS2019编写。用C#开发winform桌面程序时,程序启动后,默认是显示在桌面而且在任务栏中有对应的图标... 查看详情

java的。最小化到系统托盘

我有一个应用程序检查密码,如果密码正确,应该最小化到系统托盘。但我不知道如何设置frame隐形或使用ActionListener最小化它。publicclassMainWindowextendsJFrame{privateJPanelpanel1;privateJTextFieldPassword;privateJButtonreadyBtn;privateJLabellabel1;private 查看详情

请问怎样使程序在最小化后图标放在任务栏的托盘上?

...下载完毕后进行解压,由于是绿色软件并不需安装,双击应用程序图标运行WindowMinimizer,这时该软件程序图标会显示在系统托盘区域中。如果想将某个任务栏窗口最小化到系统托盘,可以直接在其窗口按钮上单击一下鼠标右键,... 查看详情

最小化到系统托盘区是啥意思?

最小化到系统托盘区是什么意思?参考技术A就是把程序的窗口最小化后不在任务栏显示,而是只在系统托盘里显示一个图标,系统托盘就是显示声音那个小喇叭那里,那里一小条就是系统托盘 查看详情

WPF - 将应用程序从系统托盘置于最前面

】WPF-将应用程序从系统托盘置于最前面【英文标题】:WPF-Bringapplicationtofrontfromsystemtray【发布时间】:2019-03-1616:31:12【问题描述】:我正在使用System.Windows.Forms.NotifyIcon将我的应用最小化到系统托盘。我想在用户尝试打开应用程... 查看详情

最小化到托盘程序是啥意思?通俗点哈

...QQ,一开始登陆之后QQ界面是在桌面上显示的,当你点击最小化按钮之后,QQ就是最小化到托盘了。托盘就是windows界面的右下角那块区域,哪里还有显示时间、网络连接、声音图标。最小化大到托盘之后,程序就后台运行了。最... 查看详情

vmware6.2能否像6.5一样可以最小化到托盘区?

...样,不会向系统里面添加服务。但6.5有一个优点就是可以最小化到系统托盘区(时间显示那里),而6.2却不行。不知道有没有哪位大大有方法可以将6.2也可以最小化到系统托盘区那里?我知道那些服务可以禁用,但我不想它在系... 查看详情

qt开发实现系统托盘,托盘菜单,托盘消息(代码片段)

...行的程序。windows在任务栏状态区域,linux在布告栏区域。应用程序系统托盘功能,是比较普遍的功能,本篇将详细的介绍如何实现该功能。 演示Demo实现功能:1.应用启动后,任务栏,系统托盘可以看到该程序。2.点击右上角&... 查看详情

怎么设置程序启动后最小化到托盘?

设了个自启动的程序,运行方式最小化,也设置了最小化到托盘。但启动后会先最小化到桌面下方,要打开在点击最小化才会到托盘。怎么设置程序启动后自动最小化到托盘?要实现将程序最小化到托盘,就要截获WM_SIZE消息,... 查看详情

qt系统托盘

Qt的系统托盘的使用,可比mfc中好多了!他封装了一个专门的QSystemTrayIcon类,建立系统托盘图标。其实在Qt提供的示例程序已经很不错了,$QTDIRexamplesdesktopsystray在这里简单的实现一个系统托盘功能,对其系统托盘类的使用做以演... 查看详情

qt设置系统托盘图标和程序图标

...tor)\\serial\\1.jpg");w.setWindowIcon(icon);二.设置系统托盘图标.h文件:例如:QStstemIconm_sysTray;.cpp文件:m_sysTray.setToolTip("");//设置提示文字m_sysTray.setIcon(QIcon("路径"));//设置图标QMenu*menu=newQMenu();//托盘菜单men... 查看详情