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

author author     2023-04-14     251

关键词:

设了个自启动的程序,运行方式最小化,也设置了最小化到托盘。但启动后会先最小化到桌面下方,要打开在点击最小化才会到托盘。怎么设置程序启动后自动最小化到托盘?

要实现将程序最小化到托盘,就要截获WM_SIZE消息,并作出相应的消息响应。(WM_SIZE在窗口大小改变时被抛出)
可以重载OnSize()方法,实现托盘图标。
数据结构NOTIFYICONDATA用来储存托盘图标的信息,结构如下:
typedef struct _NOTIFYICONDATA
DWORD cbSize;
HWND hWnd;
UINT uID;
UINT uFlags;
UINT uCallbackMessage;
HICON hIcon;
WCHAR szTip[64];
NOTIFYICONDATA, *PNOTIFYICONDATA;

首先要在对话框类中加入NOTIFYICONDATA变量:
NOTIFYICONDATA nid;
然后要在OnInitDialog()中对nid进行一些初始化:
nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA); //数据的大小
nid.hWnd = this->GetSafeHwnd(); //获取当前窗口句柄
nid.uID = 100; //指定该nid的ID
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP ; //定义图标的属性:图标有效|自定义消息有效|鼠标指向显示文字有效
nid.uCallbackMessage = WM_TRAYICON_RESTORE; //定义CALLBACK消息名称,用来响应对托盘图标的操作
nid.hIcon = m_hIcon; //指定显示的图标
wcscpy(nid.szTip, _T("TrayIcon")); //鼠标指向图标时的提示框

当然在头文件中要定义好WM_TRAYICON_RESTORE,
#defined WM_TRAYICON_RESTORE WM_USER+101 //这个值一般要大于100

重载OnSize()方法,假如对话框类是CTrayIconDlg;
void CTrayIconDlg::OnSize(UINT nType, int cx, int cy)

CDialog::OnSize(nType, cx, cy);

if (nType==SIZE_MINIMIZED) //如果事件为最小化

Shell_NotifyIcon(NIM_ADD,&nid); //在托盘区添加图标
ShowWindow(SW_HIDE); //隐藏主窗口



运行程序,最小化窗口,是不是成功将窗口藏到系统托盘了。
现在还不能让程序窗口还原,无论单击,双击小图标都没反应,那是因为没有对其消息进行处理。
首先在CTrayIconDlg类中加入方法:
afx_msg LRESULT OnRestore(WPARAM wParam, LPARAM lParam);

实现如下:
LRESULT CTrayIconDlg::OnRestore(WPARAM wParam, LPARAM lParam)

if( lParam == WM_LBUTTONDOWN ) //如果在图标中单击左键则还原

ShowWindow(SW_SHOWNORMAL); //显示主窗口
this->SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);//使窗口总是在最前面
//Shell_NotifyIcon(NIM_DELETE,&nid); //若加入这行,则在窗口还原后删除托盘图标,否则保留托盘图标

return 0;


把该方法加入消息映射表:
将ON_MESSAGE(WM_TRAYICON_RESTORE, OnRestore)插到映射表中
BEGIN_MESSAGE_MAP(CForexDemoDlg, CDialog)
...
...
ON_MESSAGE(WM_TRAYICON_RESTORE, OnRestore)
END_MESSAGE_MAP()
参考技术A 要程序本身支持,不支持的要用托盘管理软件。

程序本身不支持怎么设置也没用

win10定制版qq怎么最小化到托盘

...QQ在托盘里还有.或者按那个"+"选择隐藏界面,然后最小化就什么也看不到了,托盘里也没有了,要呼出的话按CTRL+ALT+C就可以啦.追问win10定制版,不是普通版参考技术A菜单键+d,或者直接点解软件右上角缩小功能键就可以,就... 查看详情

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

...图标会显示在系统托盘区域中。如果想将某个任务栏窗口最小化到系统托盘,可以直接在其窗口按钮上单击一下鼠标右键,然后在弹出的菜单中选择最下方的“最小化到托盘区”一项命令就行了,此时该窗口图标便移动到托盘中... 查看详情

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

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

win10uwp的qq怎么最小化到托盘里

参考技术A进入qq的系统设置---常规---主面板--在任务栏通知区域显示qq图标前面打上钩 参考技术Buwp应用2017年.10.10现阶段还不能设置在系统托盘内,不能想以前设置电脑版应用那样设置。以后支不支持就不清楚了。 查看详情

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

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

java的。最小化到系统托盘

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

c++builder托盘控件

想用c++builder写一个.exe,需要在最小化的时候放在托盘里,是不是有什么控件?用的控件是:TrayIcon具体用法如下:在BorlandC++Builder5.0中编写Tray程序是件很简单的事。在安装BorlandC++Builder5.0时选择Full(完全)安装,安装完成后,... 查看详情

将应用程序最小化到系统托盘

】将应用程序最小化到系统托盘【英文标题】:minimizeapptosystemtray【发布时间】:2011-11-2908:07:35【问题描述】:我有一个由C#和VisualStudio2010提供支持的Windows窗体应用程序。如何将我的应用程序最小化到系统托盘(不是任务栏),... 查看详情

c#winform启动最小化到任务栏右侧通知栏并交互操作

C#winForm启动最小化到任务栏右侧通知栏并交互操作一。主要功能:(1)、程序启动自动隐藏到任务栏右侧通知栏显示。(与系统托盘同义)(2)、双击系统托盘图标显示、隐藏窗口;(3)、右击系统托盘图标提供三个菜单选项,“... 查看详情

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

如果双击桌面图标判断该程序是否运行如果运行调出托盘中该程序如果没有运行则启动该程序要怎么写啊???就想千千静听一样。这个或许需要用一个WINAPI函数SendMessage。其实大部分的WINAPI函数,C#都已经封装好,但是这次用到... 查看详情

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

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

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

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

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

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

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

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

foobar2000设置关闭按钮最小化到系统托盘

1、设置托盘选项:2、【File】->【Preferences】->【Advanced】->【Display】->【DefaultUserInterface】->【Closeminimises】 最后来一张经典皮肤感受下foobar2000的强大:  查看详情

c#最小化到托盘+双击托盘恢复+禁止运行多个该程序(代码片段)

托盘程序的制作:1.添加notifyIcon控件,并添加Icon,否则托盘没有图标(托盘右键菜单也可直接在属性里添加);2.响应Form的Resize或SizeChanged消息://HidetosystemtrayprivatevoidForm1_Resize(objectsender,EventArgse)if(this.WindowState==FormWindowState.Minimi 查看详情

程序缩小到托盘后系统就无法关机(解决方案)——处理wm_queryendsession消息,并把它标识为处理过了

 程序缩小到托盘后系统就无法关机(解决方案)                      老帅  程序最小化到托盘后,会出现系统无法关闭的问题,常见于W 查看详情

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

】如何在Qt中打开和最小化外部应用程序到系统托盘【英文标题】:HowtoopenandminimizeexternalapptosystemtrayinQt【发布时间】:2019-04-0606:59:58【问题描述】:QProcess可以用来打开外部程序,但它总是会在所有其他窗口的前面打开一个应用... 查看详情