程序最小化到托盘
任意窗口“缩身”托盘有办法
任意窗口“缩身”托盘有办法
作者:南溪
来源:《电脑爱好者》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);
如何使程序最小化到系统托盘
如何使程序最小化到系统托盘VC编写的应用程序希望像qq,千千静听,暴风影音那样程序最小化时在系统托盘中显示而不是在任务栏中。
如下:1.在基于对话框的程序的头文件中添加成员变量NOTIFYICODATA m_nid2.自定义消息函数OnShowTask1)首先在头文件中定义 #define WM_SHOWTASK WM_USER+12)在头文件映射中在添加afx_msg LRESULT OnShowTask(WPARAM wParam,LPARAM lParam)3)在源文件中的消息映射队列中添加ON_MESSAGE (WM_SHOWTASK,OnShowTask)4)在原文件中添加自定义消息函数定义:LRESULT CMediaPlayerDialog::OnShowTask(WPARAM wParam,LPARAM lParam){if(wParam != IDR_MAINFRAME)return 1;switch(lParam){case WM_RBUTTONUP: // 右键起来时弹出菜单{LPPOINT lpoint = new tagPOINT;::GetCursorPos(lpoint); // 得到鼠标位置CMenu menu;menu.CreatePopupMenu(); // 声明一个弹出式菜单menu.AppendMenu(MF_STRING, WM_DESTROY, "退出(&X)");menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x ,lpoint->y, this);HMENU hmenu = menu.Detach();menu.DestroyMenu();delete lpoint;}break;case WM_LBUTTONDBLCLK: // 双击左键的处理{this->ShowWindow(SW_SHOWNORMAL); // 显示主窗口}break;}return 0;}3.在程序的InitDialog函数中添加如下代码://---------------------------托盘显示初始化---------------------------------//m_nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);m_nid.hWnd = this->m_hWnd;m_nid.uID = IDR_MAINFRAME;m_nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP ;m_nid.uCallbackMessage = WM_SHOWTASK; // 自定义的消息名称m_nid.hIcon = LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAI NFRAME));strcpy(m_nid.szTip, "自制播放器"); // 信息提示条为"服务器程序"Shell_NotifyIcon(NIM_ADD, &m_nid); // 在托盘区添加图标4.重载对话框程序的WM_SIZE消息void CMediaPlayerDlg::OnSize(UINT nType, int cx, int cy){CDialog::OnSize(nType, cx, cy);// TODO: Add your message handler code hereif(nType == SIZE_MINIMIZED){ShowWindow(SW_HIDE); // 当最小化时,隐藏主窗口}}5.重载WM_DESTROY消息,关闭程序时关闭托盘上的程序图标void CMediaPlayerDlg::OnDestroy(){CDialog::OnDestroy();// TODO: Add your message handler code here// 系统关闭时在托盘区删除图标Shell_NotifyIcon(NIM_DELETE, &m_nid);// return CDialog::DestroyWindow();}。
PPS取消点击关闭键最小化到托盘
PPS取消点击关闭键最小化到托盘
最近很多软件增加了一种功能,点击右上角的“关闭键”并不是关闭程序,而是最小化到托盘,那么我们该如何取消这个功能呢?
PPS取消点击关闭键最小化到托盘,实现点击关闭键直接退出程序:
打开PPS:/soft/93672.htm
接下来就是进入“设置”,这里小编教大家三种方法进入“设置”界面:
方法一:点击左上方的LOGO,在弹出的菜单中找到“设置”
方法二:右键点击鼠标,在弹出的菜单中找到“设置”
方法三:鼠标右键点击程序最小化图标,在弹出的菜单中找到“设置”
图文教程详见:PPS点播视频缓存地址
进入到设置界面后,切换到最后一个“其他”项,我们可以看到在“点击关闭按钮时”中选择了“最小化到托盘”
这时,我们应该选择至“退出”然后点击“应用”再点击“确定”
设置成功后,我们来试试,点击“关闭键”,这时候托盘中已经没有最小化的PPS图标了。
转载请注明出处:。
mfc_最小化到托盘
mfc中将软件最小化到托盘一、托盘简介所谓的“托盘”,在Windows系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那一部分。
在程序最小化或挂起时,但有不希望占据任务栏的时候,就可以把程序放到托盘区。
其实,托盘区的编程很简单,下面简要阐述一下子喽^_^二、托盘编程相关函数其实呢,把程序放到托盘上的本质就是先在托盘区绘制一个图标,然后把程序隐藏不见,再对托盘的图标进行消息处理,就可以了。
绘制图标以及确定图标所传送消息的函数只有一个,那就是——————WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(DWORD dwMessage,PNOTIFYICONDATA pnid);这个函数呢,负责向系统传递消息,以添加、修改或删除托盘区的图标。
她的返回值呢,是个布尔类型的。
就是说,如果返回0,那就是成仁啦,非0才成功。
参数dwMessage 是表示这个函数的应用功能是哪一方面,是添加、删除,还是修改图标。
如果是添加,则它的值为NIM_ADD;删除则是NIM_DELETE;而修改是NIM_MODIFY。
参数pnid就是具体的和程序在托盘区的图标有关系的结构了。
它的定义如下:typedef struct _NOTIFYICONDATA {DWORD cbSize;HWND hWnd;UINT uID;UINT uFlags;UINT uCallbackMessage;HICON hIcon;char szTip[64];} NOTIFYICONDATA, *PNOTIFYICONDATA;下面就对该结构各个参数进行刨析:cbSize : 结构的长度,用“位”来做单位。
一般在程序中,我们用(DWORD)sizeof(NOTIFYICONDATA) 给它赋值。
HWnd : 一个句柄,如果对托盘中的图标进行操作,相应的消息就传给这个句柄所代表的窗口。
自然了,大多数情况下是this->m_hWnd喽。
4t Tray Minimizer Free操作指南
4t Tray Minimizer Free操作指南1.实战目标:把某个程序最小化到托盘区实战演习:第一步:右击4T图标,选择Options,单击左边的Titlebar,如图1所示;第二步:勾选“Show'Minimizetotray'buttononthetitlebar”,这样就会在任何程序的标题栏上右上角增加“Minimizetotray”(最小化到托盘)按钮;第三步:对于任何一个程序,单击“Minimizetotray”按钮即可使其从任务栏消失,而在托盘区可以看到它的图标,双击该图标即可重新显示该窗口。
常规做法:对大部分程序如OE、IE等程序来说,单击程序窗口右上角的最小化图标,只能将当前窗口最小化到任务栏;而对于Foxmail、MyIE2等程序,可以通过设置,单击最小化按钮可以将其最小化到系统托盘。
2.实战目标:把某个程序从任务栏和托盘区都隐藏起来实战演习:第一步:右击4T图标,选择Options,单击左边的Titlebar,勾选“Show'Hidewindow'buttononthetitlebar”,这样就会在任何程序的标题栏上右上角增加“Hidewindow”(隐藏窗口)按钮,如图1所示;第二步:单击某个程序窗口右上角的“Hidewindow”按钮,是不是该窗口不见了?同样,你可以让任何一个程序从当前桌面“消失”!第三步:如何重新找到该窗口呢?按Alt+Tab键,切换到该程序的图标即可。
常规做法:只有为数不多的程序如Winamp、QQ等程序,能够通过自身的设置,实现最小化后在任务栏和托盘区都不显示图标,大部分程序无法自身实现目标功能。
3.实战目标:彻底隐藏某个程序实战演习:第一步:右击4T图标,单击左边的Hiding,取消“ShowtheiconofthehiddenapplicationinAlt+Tabdialog”的勾选,单击OK按钮;第二步:单击要彻底隐藏的程序右上角的“Hidewindow”按钮,然后按Alt+Tab键看看,是不是看不到了呢?第三步:那我怎么找到该窗口呢?别担心,右击4T图标,选择“UnhideApplication”,如图2所示,随后展开的就是已经隐藏的窗口,单击即可恢复彻底隐藏的程序了。
将 VMware 最小化到系统托盘
将VMware 最小化到系统托盘
因为一直要用到虚拟机,每次最小化的时候,总是占用任务栏,很不爽,于是在网上搜索了一番,终于找到一个可以用的方法。
首先下载一个软件,叫做Trayconizer,最好把这个文件放在固定的目录下,比如我放在了C 盘下的Windows目录,
然后找到Vm的快捷方式,右键-》属性,在快捷方式选项卡里找到“目标”,将Trayconizer的具路径复制在前边,后边是Vm的路径,最好将Vm的路径加上双引号,Trayconizer和Vm的路径中间一定要有一个空格,如图:
这样每次使用这个快捷方式打开VM后,点击最小化时就会被放到系统托盘(win7 64bit成功)。
c#编写最小化到托盘程序的右键菜单
c#编写最小化到托盘程序的右键菜单c#最小化到托盘右键菜单要怎么写呢。
需要用什么控件?拖入一个ContextMenuStrip(右键菜单)到窗体上点击该控件,为它添加一个项再为该项添加单击事件(MenuItemMin_Click,双击项或者在事件中找到单击事件双击)拖入一个NotifyIcon(托盘),为控件选择一个图标(.icon)为控件添加双击事件(notifyIcon1_MouseDoubleClick,单击事件也一样)之后如下代码public partial class TestForm : Form{public TestForm(){InitializeComponent();//给窗体(你想要弹出右键菜单的控件)加上右键菜单,也可以在属性上面直接选择绑定this.ContextMenuStrip = contextMenuStrip1;}//右键菜单中“最小化到托盘”项单击事件private void MenuItemMin_Click(object sender, EventArgs e) {//点击右键菜单最小化按钮时最小化,之后会触发TestForm_SizeChangedthis.WindowState = FormWindowState.Minimized;}//窗体大小改变事件private void TestForm_SizeChanged(object sender, EventArgs e){//窗体状态为最小化时if (this.WindowState == FormWindowState.Minimized){this.ShowInTaskbar = false;//不显示在任务栏this.notifyIcon1.Visible = true;//显示托盘图标}}//托盘图标双击事件private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e){//判断可有可无,因为目前的代码出现托盘的时候只会为最小化if (this.WindowState == FormWindowState.Minimized){//还原this.WindowState = FormWindowState.Normal;}this.Activate();this.notifyIcon1.Visible = false;this.ShowInTaskbar = true;}}二、C#实现点击窗体关闭按钮时到系统托盘,右键系统托盘弹出菜单点击退出退出整个程序private void FormSender_FormClosing(object sender, FormClosingEventArgs e){if (e.CloseReason == /doc/ec5746452.html,erClosing)//当用户点击窗体右上角X按钮或(Alt + F4)时发生{e.Cancel = true;this.ShowInTaskbar = false;this.notifyIcon1.Visible = true;notifyIcon1.BalloonTipTitle = "程序已最小化";notifyIcon1.BalloonTipT ext = "程序还在继续运行......" + "\r\n" + "双击托盘图标还原窗口.";notifyIcon1.ShowBalloonTip(2000);this.Hide();}}private void 退出ToolStripMenuItem_Click(object sender, EventArgs e){ListenThread.Abort();th.Abort();tcpListener.Stop();Application.Exit();}private void notifyIcon1_DoubleClick(object sender, EventArgs e){if (this.Visible == false)this.Visible = true;}private void FormSender_SizeChanged(object sender, EventArgs e){if (WindowState == FormWindowState.Minimized){this.ShowInTaskbar = true;notifyIcon1.Visible = false;}}三、C#中击右上角的关闭按钮("X")实现不是关闭而是最小化到右下角托盘;还有增加托盘图标右键单击弹出“退出”菜单using System;using System.Collections.Generic;using/doc/ec5746452.html,ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WindowsFormsApplication1{public partial class Form1 : Form{int i = 0;public Form1(){InitializeComponent();}private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e){this.Show();}private void Form1_FormClosing(object sender, FormClosingEventArgs e){if (i == 0){e.Cancel = true;this.Hide();}else{e.Cancel = false;}}private void 关闭ToolStripMenuItem_Click(object sender, EventArgs e){i =1;Application.Exit();}}}四、C# WinForm窗口最小化到系统托盘右键操作菜单注:开发工具:VS20051。
程序最小化到托盘
{
if(wParam!=IDR_MAINFRAME)
return 1;
switch(lParam)
{
case WM_RBUTTONUP://右键起来时弹出快捷菜单,这里只有一个“关闭”
delete lpoint;
}
break;
case WM_LBUTTONDBLCLK://双击左键的处理
{
this->ShowWindow(SW_SHOW);//简单的显示主窗口完事儿
}
2、程序已经最小化到托盘区了,但是对托盘图标的操作如何进行呢?这就体现了结构NOTIFYICONDATA的成员uCallbackMessage 的作用了。它所提供的作用就是,当用户用鼠标点击托盘区的图标的时候(无论是左键还是右键),会向hWnd所代表的窗口传送消息.
如上例,我们自定义了消息WM_SHOWTASK。根据VC的消息机制,对自定义消息增加消息响应函数.
然后在CPP文件中添加消息映射。在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP 之间加入: ON_MESSAGE(WM_SHOWTASK,onShowTask)将消息和消息响应函数映射起来。
然后就是在CPP文件中加入函数onShowTask的实现了:
LRESULT CTimeWakeDlg::onShowTask(WPARAM wParam,LPARAM lParam)
strcpy(nid.szTip,"计划任务提醒"); //信息提示条为“计划任务提醒”
Shell_NotifyIcon(NIM_ADD,&nid); //在托盘区添加图标
QT如何实现后台运行(即最小化到右下角托盘)
QT如何实现后台运行(即最小化到右下角托盘)第一期:用hello world简单的代码更容易看懂托盘的具体实现,一些细节问题,比如为什么提示消息没有显示在托盘上,如何在tip消息上增加图标等。
#include <QtGui>class myclass: public QWidget{public:myclass();private:QPushButton *b1;QSystemTrayIcon *trayIcon;};myclass::myclass(){QTextCodec::setCodecForTr(QTextCodec::codecForName("G B2312"));setMinimumSize(200,100);setMaximumSize(200,100);b1=new QPushButton("hello world",this);b1->setGeometry(20,20,160,40);QIcon icon = QIcon("./images/bad.svg");setWindowIcon(icon);trayIcon = new QSystemTrayIcon(this);trayIcon->setIcon(icon);trayIcon->setT oolTip("a trayicon example");QString titlec=tr("Hello");QString textc=QString::fromLocal8Bit("Hello QT?");trayIcon->show();trayIcon->showMessage(titlec,textc,QSystemTrayIcon::Infor mation,5000);setWindowTitle(tr("Systray"));}int main(int argc,char **argv){QApplication testc(argc,argv);myclass newc;newc.show();return testc.exec();}第二期:进一步研究,加入点击托盘的响应,使提示信息显示在托盘上,托盘的右键菜单。
wxpython最小化到托盘与欢迎图片的实现方法
wxpython最⼩化到托盘与欢迎图⽚的实现⽅法⼀直在学习系统托盘的实现,于是⾃⼰写了⼀个简单的系统托盘实例,右键包括演⽰、最⼤化、最⼩化、退出和关于。
在python2.6下测试通过。
注意,本节分享的python实例代码,这⾥是托盘上的图标弹出菜单是覆盖了CreatePopupMenu。
也可以绑定2个⽅法,⼀个wx.EVT_TASKBAR_RIGHT_DOWN,⽅法⾥⾯⽣成menu,然后再来⼀个wx.EVT_MENU,定义要处理的事件函数。
还有⼀个就是Wx窗体上的最⼩化按钮,触发的事件是 wx.EVT_ICONIZE,⽽根本就没有定义什么wx.EVT_MINIMIZE,但是最⼤化,有个wx.EVT_MAXIMIZE。
复制代码代码如下:#!/usr/bin/python# _*_ coding: utf-8 _*_import wxclass TaskBarIcon(wx.TaskBarIcon):ID_Hello = wx.NewId()def __init__(self, frame):wx.TaskBarIcon.__init__(self)self.frame = frameself.SetIcon(wx.Icon(name='wx.ico', type=wx.BITMAP_TYPE_ICO), 'TaskBarIcon!')self.Bind(wx.EVT_TASKBAR_LEFT_DCLICK, self.OnTaskBarLeftDClick)self.Bind(wx.EVT_MENU, self.OnHello, id=self.ID_Hello)def OnTaskBarLeftDClick(self, event):if self.frame.IsIconized():self.frame.Iconize(False)if not self.frame.IsShown():self.frame.Show(True)self.frame.Raise()def OnHello(self, event):wx.MessageBox('Hello From TaskBarIcon!', 'Prompt')# overridedef CreatePopupMenu(self):menu = wx.Menu()menu.Append(self.ID_Hello, 'Hello')return menuclass Frame(wx.Frame):def __init__(self, parent=None, id=wx.ID_ANY, title='TaskBarIcon', pos=wx.DefaultPosition,size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE):wx.Frame.__init__(self, parent, id, title, pos, size, style)# create a welcome screenscreen = wx.Image(self.screenIm).ConvertToBitmap()wx.SplashScreen(screen, wx.SPLASH_CENTRE_ON_SCREEN | wx.SPLASH_TIMEOUT,1000, None, -1)wx.Yield()self.SetIcon(wx.Icon('wx.ico', wx.BITMAP_TYPE_ICO))panel = wx.Panel(self, wx.ID_ANY)button = wx.Button(panel, wx.ID_ANY, 'Hide Frame', pos=(60, 60))sizer = wx.BoxSizer()sizer.Add(button, 0)panel.SetSizer(sizer)self.taskBarIcon = TaskBarIcon(self)# bind eventself.Bind(wx.EVT_BUTTON, self.OnHide, button)self.Bind(wx.EVT_CLOSE, self.OnClose)self.Bind(wx.EVT_ICONIZE, self.OnIconfiy) # 最⼩化事件绑定 def OnHide(self, event):self.Hide()def OnIconfiy(self, event):wx.MessageBox('Frame has been iconized!', 'Prompt')event.Skip()def OnClose(self, event):self.taskBarIcon.Destroy()self.Destroy()def TestFrame():app = wx.PySimpleApp()frame = Frame(size=(640, 480))frame.Centre()frame.Show()app.MainLoop()if __name__ == '__main__':TestFrame()。
C#开发WinForm程序如何实现简单的”最小化“到系统托盘功能
C#开发WinForm程序如何实现简单的”最小化“到系统托盘功能C#开发WinForm程序如何实现简单的”最小化“到系统托盘功能1、了解NotifyIcon控件NotifyIcon是一个比较特殊的组件,其特殊之处是既可以把它归类到控件中,也可以把它归类到组件中。
这是因为将其拖放到设计窗体后,我们并不能马上看到它的界面(像组件),而是在运行时才能看到它(像控件)。
通知区域中的图标是一些进程的快捷方式,这些进程在计算机后台运行,如防病毒程序或音量控制。
这些进程不会具有自己的用户界面。
NotifyIcon类提供了编写此功能的方法。
Icon属性定义显示在通知区域中的图标。
图标的弹出菜单由ContextMenu 属性确定。
Text 属性分配工具提示文本。
要在通知区域中显示图标,必须将Visible属性设置为true。
2、拖放一个NotifyIcon控件主要设置的是该控件的Icon属性,Visible属性设置为False。
3、编写窗体的SizeChanged事件if (this.WindowState == FormWindowState.Minimized) //判断是否最小化{this.ShowInTaskbar = false; //不显示在系统任务栏binzhounotifyIcon.Visible = true; //托盘图标可见,其中binzhounotifyIcon为上述notifyicon控件的ID}4、编写NotifyIcon控件的DoubleClick事件该事件完成的是当双击系统托盘的缩略图时还原系统if (this.WindowState == FormWindowState.Minimized){this.ShowInTaskbar = true; //显示在系统任务栏this.WindowState = FormWindowState.Normal; //还原窗体binzhounotifyIcon.Visible = false; //托盘图标隐藏}至此简单的系统托盘功能就实现了。
- 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);。