程序最小化到托盘
任意窗口“缩身”托盘有办法

任意窗口“缩身”托盘有办法
作者:南溪
来源:《电脑爱好者》2018年第07期
首先,我们可以用TrayIt!软件来解决。
软件运行首先会出现英文向导界面(图1)。
点击OK按钮之后,可用多种方法,轻松地将任意窗口最小化到系统托盘上。
打开一个窗口后,按住Shift不放,再点窗口的最小化按钮,可将该窗口图标最小化到系统托盘区域。
上述方法可让窗口临时最小化到系统托盘。
若要将窗口图标永久驻留系统托盘,可在上述已置于系统托盘的图标上单击鼠标右键,然后在快捷菜单中选择“Place in System Tray”命令(图2)。
或者在TrtayIt!主窗口选中要永久驻留系统托盘的窗口条目,然后点击工具栏上的第四个按钮,效果相同(图3)。
此外,還可以右键单击窗口边框右上角的最小化图标,然后选择“Place in System Tray”命令(图4)。
要最大化地发挥作用,还需通过Options窗口进行必要的设置。
先选择“Load TrayIt! at Startup”让软件随系统自动启动,选择“Always start minized”启动程序后自动最小化;将Grouping分组下的复选框选中,将同类程序图标分为一组;若选择“Hold instead of minizing a windows to the tray”,则以Shift键来代替Ctrl键,之后按下Shift键并点击最小化按钮,才可将图标最小化到系统托盘(图5)。
扩展阅读
我们还可以用DM2这个比较有特色的软件最小化窗口。
它不但可以将窗口最小化到系统托盘上,还可以将窗口最小化为浮动图标。
与此同时,还可以设置窗口的透明度和优先级。
JavaSwing开发,将程序最小化至系统托盘_☆时光☆_百度空间

JavaSwing开发,将程序最小化至系统托盘_☆时光☆_百度空间Java Swing开发,将程序最小化至系统托盘下面的函数是最小化至托盘的按钮的点击响应函数。
private void minimizeButtonActionPerformed(java.awt.event.ActionEvent evt) {// TODO add your handling code here:if (SystemTray.isSupported()) // 判断系统是否支持系统托盘{SystemTray sysTray = SystemTray.getSystemTray(); // 获得系统托盘Image image = null;try {image = ImageIO.read(MainFrame.class.getResource("/res/icon.jpg")); // 载入图片,这里要写你的图标路径哦} catch (IOException e) {}// 创建弹出菜单PopupMenu popupMenu = new PopupMenu();MenuItem mainFrameItem = new MenuItem("主界面");ActionListener openMainFrameListener = new ActionListener(){@Overridepublic void actionPerformed(ActionEvent ae){MainFrame.this.setVisible(true);}};mainFrameItem.addActionListener(openMainFrameListener);MenuItem exitItem = new MenuItem("退出程序");exitItem.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e){if (JOptionPane.showConfirmDialog(null, "确定退出系统?","询问",JOptionPane.YES_NO_OPTION) ==JOptionPane.YES_OPTION ){System.exit(0);}}});popupMenu.add(mainFrameItem);popupMenu.add(exitItem);TrayIcon trayIcon = new TrayIcon(image, "seara", popupMenu);// 创建trayIcontrayIcon.addActionListener(openMainFrameListener);try{sysTray.add(trayIcon);} catch (Exception e) {}MainFrame.this.setVisible(false);}else{JOptionPane.showMessageDialog(MainFrame.this,"本系统不支持最小化至系统托盘!","通知",JOptionPane.OK_OPTION);}}。
qt 最小化 工作原理

qt 最小化工作原理
Qt最小化的工作原理是将窗口隐藏到任务栏或系统托盘中,以便在需要时可以快速恢复窗口。
具体工作原理如下:
1. 当用户点击窗口的最小化按钮时,操作系统会发送一个最小化的信号给应用程序。
2. 应用程序收到最小化信号后,会调用Qt框架提供的最小化函数,将窗口隐藏到任务栏或系统托盘中。
3. 在Windows操作系统中,Qt会调用系统API将窗口最小化并发送一个最小化事件给窗口的事件循环。
4. 在Linux和Mac操作系统中,Qt会发送一个最小化事件给窗口的事件循环,然后由事件循环处理最小化操作。
5. 当用户需要恢复窗口时,可以通过点击任务栏上的应用程序图标或系统托盘上的图标来触发恢复操作。
6. 应用程序收到恢复信号后,会调用Qt框架提供的恢复函数,将窗口还原到之前的大小和位置。
Qt最小化的工作原理是通过操作系统提供的API将窗口隐藏,并在需要时通过用户操作触发恢复操作。
最小化到托盘

If Me.WindowState = vbMinimized Then
cSysTray1.InTray = True
Me.Visible = FalseEnd If
End SLeabharlann b 点击托盘图标后让程序显示出来,如下:
Private Sub cSysTray1_MouseDown(Button As Integer, Id As Long)
Me.WindowState = vbNormal
Me.Visible = True
cSysTray1.InTray = False
Me.SetFocus
End Sub
然后在自己的VB程序中添加改控件(工程-部件-浏览)。
最好把这个ocx放到C:\WINDOWS\system32。
改控件的属性InTray属性用来设置是否显示在托盘中,True为显示在托盘,False为不显示。TrayIcon属性是在托盘中显示的图标式样。TrayTip属性是鼠标移到改控件上面显示的提示文字。如果要使程序最小化时显示到托盘,如下:
单击“最小化”按钮(标题栏的右边)将窗口缩小为任务栏上右边的图标,同时隐藏原窗体。单击或者右键托盘化的图标,可以重现原窗体。
vb中有部分api可以实现将窗体最小化的功能,但是非常繁琐。这里有一个非常简单的办法:可以用微软封装好的控件来实现,不过该控件并不在VB安装目录中,需要找到VB的安装盘(不是安装以后的目录)的COMMON\TOOLS\VB\UNSUPPRT\SYSTRAY目录,将Systray目录拷到硬盘上面并编译为ocx控件(编译前记得要先把只读属性修改掉,有时候会提示要先保存,直接保存。),
Qt之程序最小化托盘显示及操作

Qt之程序最⼩化托盘显⽰及操作展开1.功能说明对于GUI程序,如果想要实现当最⼩化时,程序从任务栏消失,在系统托盘显⽰⼀个图标,表⽰此程序,并能在托盘内通过双击或者菜单使程序界⾯恢复。
2.使⽤的类主要使⽤的此类:QSystemTrayIcon。
其中QSystemTrayIcon是主要操作系统托盘的操作类,通过此类,可以在托盘显⽰指定程序的图标,响应⽤户⿏标的单击,双击,或wheel操作(好像只对X11系统有⽤),显⽰指定消息,显⽰菜单等。
此类中有两个枚举类型,分别如下:enum QSystemTrayIcon::ActivationReason 表述托盘上图标的触发缘由常量值描述QSystemTrayIcon::Unknown 0 未知原因QSystemTrayIcon::Context 1 请求系统托盘的上下⽂菜单QSystemTrayIcon::DoubleClick 2 ⿏标双击QSystemTrayIcon::Trigger 3 ⿏标单击QSystemTrayIcon::MiddleClick 4 ⿏标中间按键enum QSystemTrayIcon::MessageIcon 当显⽰⽓球消息时显⽰的图⽚常量值描述QSystemTrayIcon::NoIcon 0 不显⽰图标QSystemTrayIcon::Information 1 显⽰信息图标QSystemTrayIcon::Warning 2 显⽰告警图标QSystemTrayIcon::Critical 3 显⽰致命图标3.QSystemTrayIcon常⽤函数void setIcon(const QIcon& icon)设置系统托盘的图标void setToolTip(const QString &tip)设置⿏标放到图标上的提⽰⽂字void setContextMenu(QMenu* menu);设置当点击图标弹出的菜单void show()显⽰系统托盘图标4.代码1.实现程序托盘显⽰a)新建⼀个QWidget程序,在界⾯上放⼊⼀个QPushButton,text改为“最⼩化”,如下图:b)给⼯程加⼊Qt Resource资源⽂件,添加⼀个在托盘显⽰的icon图⽚,如图:c)给a中的QPushButton,建⽴槽函数,在槽函数内实现程序最⼩化托盘显⽰void MainWindow::on_pushButton_clicked(){//隐藏程序主窗⼝this->hide();//新建QSystemTrayIcon对象mSysTrayIcon = new QSystemTrayIcon(this);//新建托盘要显⽰的iconQIcon icon = QIcon("../IMClient/Resources/GG64.png");//将icon设到QSystemTrayIcon对象中mSysTrayIcon->setIcon(icon);//当⿏标移动到托盘上的图标时,会显⽰此处设置的内容mSysTrayIcon->setToolTip(QObject::trUtf8("测试系统托盘图标"));//在系统托盘显⽰此对象mSysTrayIcon->show();}运⾏程序,点击按钮最⼩化,可以在系统托盘看到此图标,⿏标移到上⾯,可以见看见代码中所设的”测试系统托盘图标”⽂本,如图:2.实现托盘图标操作最⼩化后显⽰在系统托盘内,此时除了在任务管理器中结束此程序,⽆法再做其他操作,⽽我们还想实现双击图标显⽰主界⾯,单击图标弹出菜单等实现其他操作,此时,就需要使⽤QSystemTrayIcon::ActivationReason属性了。
C#示例 Windows窗体最小化到系统托盘

C#示例最小化窗体到系统托盘作者凯征1.创建项目新建一个C# Windows窗体应用程序,命名为System Tray。
2.添加NotifyIcon控件拷贝一个图标文件到项目文件夹,拖动工具箱中的NotifyIcon控件到窗体中,在NotifyIcon1控件的属性页中将(Name)项改为TrayNotifyIcon,在Icon项中添加刚才拷贝的图标,Text项添加“系统托盘示例”。
.3.更改主窗体图标和标题在主窗体属性页中,在Icon项中添加刚才拷贝的图标,将Text项改为“系统托盘示例”。
4.更改主窗体类名在主窗体属性页中,将(Name)项改为SystemTrayForm。
5.添加单击托盘事件响应代码在SystemTray类中添加显示和隐藏两种方法,代码如下:// 显示窗体及任务栏图标private void ShowMainForm(){this.Visible = true; // 窗体可见this.WindowState = FormWindowState.Normal; // 窗体状态为正常TrayNotifyIcon.Visible = true; // 托盘图标可见this.ShowInTaskbar = true; // 在任务栏显示窗体}// 隐藏窗体和任务栏图标private void HideMainForm(){this.WindowState = FormWindowState.Minimized; // 最小化时隐藏窗体this.Visible = false; // 窗体不可见this.TrayNotifyIcon.Visible = true; // 图标在任务栏区域可见this.ShowInTaskbar = false; // 不在在任务栏显示窗体}在TrayNotifyIcon控件事件页MouseClick项中添加TrayNotifyIconMouseClick事件,并添加如下代码:// 判断是否单击鼠标左键if (e.Button == MouseButtons.Left){// 切换显示状态if(this.WindowState == FormWindowState.Minimized){ShowMainForm();}else{HideMainForm();}}6.添加单击最小化框事件响应代码在TrayNotifyIcon控件事件页MouseClick项中添加SystemTrayFormDeactivate事件,并添加如下代码:// 判断是否为最小化状态if (this.WindowState == FormWindowState.Minimized){HideMainForm();}7.程序启动时隐藏窗体将主窗体属性页中的WindowsState项改为Minimized,以使程序启动时最小化窗口,将ShowInTaskbar项改为False,使程序窗体不显示在任务栏中。
VB6最小化到托盘

怎样用VB6.0实现将窗体最小化到托盘区悬赏分:50 - 解决时间:2006-8-11 15:09怎样用VB6.0实现将窗体最小化到托盘区?提问者:懒狗炸弹- 见习魔法师二级最佳答案忙了我一下午了!弄好了!1、新建立一个VB6工程,将Form1的ShowInTaskBar属性设置为False2、菜单:工程--添加模块按“打开”这样就添加了一个新模块,名为Module1,保存为Module1.bas3、在Module1中写下如下代码:Option ExplicitPublic Const MAX_TOOLTIP As Integer = 64Public Const NIF_ICON = &H2Public Const NIF_MESSAGE = &H1Public Const NIF_TIP = &H4Public Const NIM_ADD = &H0Public Const NIM_DELETE = &H2Public Const WM_MOUSEMOVE = &H200Public Const WM_LBUTTONDOWN = &H201Public Const WM_LBUTTONUP = &H202Public Const WM_LBUTTONDBLCLK = &H203Public Const WM_RBUTTONDOWN = &H204Public Const WM_RBUTTONUP = &H205Public Const WM_RBUTTONDBLCLK = &H206Public Const SW_RESTORE = 9Public Const SW_HIDE = 0Public nfIconData As NOTIFYICONDATAPublic Type NOTIFYICONDATAcbSize As LonghWnd As LonguID As LonguFlags As LonguCallbackMessage As LonghIcon As LongszTip As String * MAX_TOOLTIPEnd TypePublic Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As LongPublic Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDA TA) As Long'4、在Form1的Load事件中写下如下代码:Private Sub Form_Load()'以下把程序放入System Tray====================================System Tray BeginWith nfIconData.hWnd = Me.hWnd.uID = Me.Icon.uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP.uCallbackMessage = WM_MOUSEMOVE.hIcon = Me.Icon.Handle'定义鼠标移动到托盘上时显示的Tip.szTip = App.Title + "(版本" & App.Major & "." & App.Minor & "." & App.Revision & ")" & vbNullChar.cbSize = Len(nfIconData)End WithCall Shell_NotifyIcon(NIM_ADD, nfIconData)'=============================================================System Tray EndMe.HideEnd Sub'5、在Form1的QueryUnload事件中写入如下代码:Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)Call Shell_NotifyIcon(NIM_DELETE, nfIconData)End Sub'6、在Form1的MouseMove事件中写下如下代码:Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim lMsg As SinglelMsg = X / Screen.TwipsPerPixelXSelect Case lMsgCase WM_LBUTTONUP'MsgBox "请用鼠标右键点击图标!", vbInformation, "实时播音专家"'单击左键,显示窗体ShowWindow Me.hWnd, SW_RESTORE'下面两句的目的是把窗口显示在窗口最顶层'Me.Show'Me.SetFocus'' Case WM_RBUTTONUP'' PopupMenu MenuTray '如果是在系统Tray图标上点右键,则弹出菜单MenuTray'' Case WM_MOUSEMOVE'' Case WM_LBUTTONDOWN'' Case WM_LBUTTONDBLCLK'' Case WM_RBUTTONDOWN'' Case WM_RBUTTONDBLCLK'' Case ElseEnd SelectEnd Sub7、现在将程序保存起来运行看看系统托盘处是否增加了一个本工程的图标。
gtk--最小化到系统托盘

gtk_widget_show_all(win);
gtk_main();
return 0;
}
typedef enum
{
GDK_WINDOW_STATE_WITHDRAWN = 1 << 0,
GDK_WINDOW_STATE_ICONIFIED = 1 << 1,
GDK_WINDOW_STATE_MAXIMIZED = 1 << 2,
GDK_WINDOW_STATE_STICKY = 1 << 3,
//gtk_status_icon_set_from_icon_name(tray,"Test");
gtk_status_icon_set_tooltip_text(tray,"This is Test");
gtk_status_icon_set_visible(tray,FALSE);
GtkWidget *win;
GtkStatusIcon *tray;
gtk_init(&argc,&argv);
win=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(win),GTK_WIN_POS_CENTER);
g_signal_connect(G_OBJECT(tray),"activate",G_CALLBACK(tray_on_click),win);
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VC++6.0中实现将应用程序的图标加入到Windows的系统托盘中(就是为应用程序在桌面右下角添加一个图标,和QQ类似)有位老兄说我乱贴,可能这位老兄已经看得眼花缭乱了,Shell_NotifyIcon 是一个Windows SDK的一个函数,只要你在windows下编程,不管你是BCB、VC、VB,都可以调用它来实现托盘图标,只是调用方法不同罢了。
常常能见到一些优秀的软件在运行后会将其应用程序图标加入到系统托盘中。
如果能将自己编写的应用程序的图标也加入到系统托盘中,将会使你的程序显得很有专业水准。
其实这并不困难,与系统托盘通信的函数只有一个:
Shell_NotifyIcon (UINT message, NOTIFYICONDATA &m_nid);
首先看一下该函数的两个参数。
第一个参数message可以取以下值:NIM_ADD 向托盘中加入一个图标; NIM_MODIFY 修改托盘中的图标;NIM_DELETE 从托盘中删除一个图标;
第二个参数m_nid是NOTIFYICONDATA结构的一个引用。
该结构的原型如下:
typedef struct _NOTIFYICONDATA
{
DWORD cbSize;// 结构的大小,必须在程序中给出
HWND hWnd; //是你程序中将要接收托盘消息的窗口句柄
UINT uID; // 应用程序中定义的托盘图标ID,此参数用作标识
UINT uFlags; //设置属性,低三位有意义,0--7,如下:
//第一位//#define NIF_MESSAGE 0x1 // uCallbackMessage参数有效
//第二位//#define NIF_ICON 0x2 // hIcon参数有效
//第三位//#define NIF_TIP 0x4 // szTip参数有效UINT uCallbackMessage; // 自定义的消息ID值,一定不要与以有的消息ID相重。
HICON hIcon; //显示在系统托盘上的Icon的句柄,可以为系统的IDI_WINLOGO等
CHAR szTip[64]; // 用于图标显示的提示字符串
} NOTIFYICONDATA;
为了接收到来自托盘的通知消息你可以将uCallbackMessage设定为你所定义的消息ID值,同时设定NIF_MESSAGE标志。
这样当用户在你的托盘图标上移动或按下鼠标时,Windows将发出消息:该消息的messageID是你在uCallbackMessage中定义的值;wParam是你定义的uID值;而lParam是鼠标事件(如WM_LBUTTONDOWN),这样你的应用程序就能响应该事件了。
因此,为了将自己的应用程序加入到系统托盘中,首先得建立一处理托盘通知消息的窗口对象,然后将窗口对象与你自己的托盘通知消息联系起来并建立相应的托盘通知消息映射机制,以便你的窗口对象能处理相应的事件。
可以看到结构体NOTIFYICONDATA中,其成员变量hWnd,uID,uFlags均用于在窗口对象与你自己的托盘通知消息之间建立联系,而成员变量uCallbackMessage则必须是对应于你的窗口对象的托盘通知消息ID值。
于是要完成的工作有:
(1)建立一处理托盘通知消息的窗口对象;
(2)建立一结构体NOTIFYICONDATA变量,并给变量的相应域赋值以在托盘通知消息与窗口对象之间建立联系;
(3)建立相应的托盘通知消息映射机制;
(4)调用Shell_NotifyIcon函数以在系统托盘中加入、修改或删除图标;
(5)当然别忘了在你的窗口对象中编写相应的事件响应函数。
NOTIFYICONDATA NotifyIcon;
#define WM_NC (WM_USER+0x101)
// 实现
protected:
afx_msg LRESULT OnNotifyIcon(WPARAM wParam,LPARAM IParam);
BEGIN_MESSAGE_MAP(CDiningManageDlg, CDialog)
ON_MESSAGE(WM_NC,OnNotifyIcon)
END_MESSAGE_MAP()
LRESULT CDiningManageDlg::OnNotifyIcon(WPARAM wParam,LPARAM IParam)
{
if ((IParam == WM_LBUTTONDOWN) || (IParam == WM_RBUTTONDOWN))
{
ModifyStyleEx(0,WS_EX_TOPMOST);
ShowWindow(SW_SHOW);
}
return 0;
}
NotifyIcon.cbSize=sizeof(NOTIFYICONDATA);
NotifyIcon.hIcon=AfxGetApp()->LoadIcon(IDI_ICON_Notify);//IDR_MAINFRAME NotifyIcon.hWnd=m_hWnd;
lstrcpy(NotifyIcon.szTip,L"接口程序");
NotifyIcon.uCallbackMessage = WM_NC;
NotifyIcon.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;
Shell_NotifyIcon(NIM_ADD,&NotifyIcon);
ShowWindow(SW_HIDE);
Shell_NotifyIcon(NIM_DELETE, &NotifyIcon);。