-
VB.net怎么最小化到系统托盘
小孩放假了,天天在电脑上看动画片,时间有点长,对小孩视力和身体都不好,准备自己写个有个性的保护程序,就是固定时间直接播放声音,并锁定屏幕一定间隔,过后程序自动最小化到托盘。现在遇到问题,不知道vb.net程序 怎么最小化到系统托盘,百度到一篇资料CP过来参考。新浪微博对代码支持不好,排序有问题,可以直接查阅: http://oteman.blog.sohu.com/47614796.html
所谓静态托盘程序是指程序运行后,在系统托盘区的图标处于静止状态的托盘程序。动态托盘程序正好与之相反,它是指在系统托盘区图标呈现动画效果的一类托盘程序。下面就来探讨一下VB.NET是如何实现静态托盘程序。 .Net FrameWork SDK为编写托盘程序提供了一个组件:NotifyIcon组件。NotifyIcon组件是一个WinForm组件,位于命名空间"System.Windows.Forms"中,在VB.NET程序中,只要创建一个NotifyIcon组件的实例,并且对NotifyIcon实例的"Icon"属性赋值,这样一个简单的托盘程序就完成了。下面就是这个简单托盘程序对于的代码(Form1.vb):
Public Class Form1 Inherits System.Windows.Forms.Form #Region " Windows 窗体设计器生成的代码 " Public Sub New ( ) MyBase.New ( ) '该调用是 Windows 窗体设计器所必需的。 InitializeComponent ( ) '在 InitializeComponent ( ) 调用之后添加任何初始化 End Sub '窗体重写处置以清理组件列表。 Protected Overloads Overrides Sub Dispose ( ByVal disposing As Boolean ) If disposing Then If Not ( components Is Nothing ) Then components.Dispose ( ) End If End If MyBase.Dispose ( disposing ) End Sub 'Windows 窗体设计器所必需的 Private components As System.ComponentModel.IContainer '注意:以下过程是 Windows 窗体设计器所必需的 '可以使用 Windows 窗体设计器修改此过程。 '不要使用代码编辑器修改它。 Friend WithEvents NotifyIcon1 As System.Windows.Forms.NotifyIcon '创建一个NotifyIcon实例 Friend TrayIcon = New Icon ( "Tray.ico" ) '创建一个Icon实例 <System.Diagnostics.DebuggerStepThrough ( ) > Private Sub InitializeComponent ( ) Me.components = New System.ComponentModel.Container ( ) Me.NotifyIcon1 = New System.Windows.Forms.NotifyIcon ( Me.components ) Me.NotifyIcon1.Text = "NotifyIcon1" Me.NotifyIcon1.Visible = True '对NotifyIcon实例的Icon属性赋值,完成简单托盘程序 Me.NotifyIcon1.Icon = TrayIcon Me.AutoScaleBaseSize = New System.Drawing.Size ( 6 , 14 ) Me.ClientSize = New System.Drawing.Size ( 292 , 273 ) Me.Name = "Form1" Me.Text = "Form1" End Sub #End Region End Class '启动程序 Module Module1 Sub Main ( ) Application.Run ( new Form1 ( ) ) End sub End Module |
但是这个托盘程序还不是真正意义上的托盘程序,因为它还有很多具体功能没有实现,下面就列出这些功能,并介绍具体的实现方法
(1).托盘程序是隐藏窗口后,程序不应该显示在任务栏中,并且一般运行后都不显示窗口:
这是通过设定窗体的属性来完成的,具体如下:
'设定程序不应该显示在任务栏 Me.ShowInTaskbar = False '设定程序运行后最小化 Me.WindowState = System.Windows.Forms.FormWindowState.Minimized |
(2).定义托盘程序中的菜单和相关事件:
往NotifyIcon实例中添加菜单,首先要创建ContextMenu实例,此实例主要作用是表示快捷菜单,其中的菜单项是通过创建MenuItem实例来实现,托盘程序中的菜单有几个菜单项,就创建几个MenuItem实例。然后把这些菜单项加入到ContextMenu实例,并把此实例赋值给NotifyIcon实例的ContextMenu属性,这样托盘程序右键点击弹出的菜单就完成了。下面是具体代码:
创建ContextMenu实例和MenuItem实例: Friend WithEvents ContextMenu1 As System.Windows.Forms.ContextMenu Friend WithEvents MenuItem1 As System.Windows.Forms.MenuItem Friend WithEvents MenuItem2 As System.Windows.Forms.MenuItem Friend WithEvents MenuItem3 As System.Windows.Forms.MenuItem |
把这些菜单项加入到ContextMenu实例,并把ContextMenu实例赋值给NotifyIcon实例的ContextMenu属性:
Me.MenuItem1 = New System.Windows.Forms.MenuItem ( ) Me.MenuItem2 = New System.Windows.Forms.MenuItem ( ) Me.MenuItem3 = New System.Windows.Forms.MenuItem ( ) Me.NotifyIcon1.ContextMenu = Me.ContextMenu1 Me.NotifyIcon1.Text = "VB.NET的托盘程序" Me.NotifyIcon1.Visible = True '设定托盘程序托盘区位置显示图标 Me.NotifyIcon1.Icon = TrayIcon '在ContextMenu实例中加入菜单项 Me.ContextMenu1.MenuItems.Add ( Me.MenuItem1 ) Me.ContextMenu1.MenuItems.Add ( Me.MenuItem2 ) Me.ContextMenu1.MenuItems.Add ( Me.MenuItem3 ) Me.MenuItem1.Index = 0 Me.MenuItem1.Text = "显示窗体" Me.MenuItem2.Index = 1 Me.MenuItem2.Text = "隐藏窗体" Me.MenuItem3.Index = 2 Me.MenuItem3.Text = "退出" |
当把ContextMenu实例赋值给NotifyIcon实例的ContextMenu属性后,托盘程序的缺省状态是当鼠标右击托盘图标,就会弹出对应的菜单。这时就可以对其中的每一个菜单项定义相应的事件以及具体的处理方法。一个完整的静态托盘程序的编写过程就完成了。
最后要请读者注意的是,由于本文中的托盘程序的图标并不是通过创建资源文件来实现的,而是通过创建Icon实例完成的。所以在程序运行的时候,必须在程序的当前目录存在一个图标文件,并且此图标文件的名称为"Tray.ico"。下面是这个静态托盘程序的完整的代码清单
(Form2.vb):
Public Class Form1
#Region " Windows 窗体设计器生成的代码 "
'设定托盘程序托盘区位置显示图标
'在ContextMenu实例中加入菜单项
'设定程序不应该显示在任务栏
Me.ShowInTaskbar = False
'设定程序运行后最小化
#End Region
End Class
'启动程序
Module Module1
Sub Main ( )
End sub
End Module
Form2.vb经过了下列命令编译、连接后:
Vbc /r:system.dll /r:system.windows.froms.dll /r:system.drawing.dll form2.vb
就可以得到Form2.exe,下图是From2.exe运行的界面:
Friend WithEvents NotifyIcon1 As System.Windows.Forms.NotifyIcon Friend WithEvents ContextMenu1 As System.Windows.Forms.ContextMenu Friend WithEvents MenuItem1 As System.Windows.Forms.MenuItem Friend WithEvents MenuItem2 As System.Windows.Forms.MenuItem Friend WithEvents MenuItem3 As System.Windows.Forms.MenuItem '创建Icon实例,用以切换图标 Friend Icon1 = New Icon ( "icon1.ico" ) Friend Icon2 = New Icon ( "icon2.ico" ) '为不同图标的切换提供标识符 Dim BeginFlag As Boolean = True '定时器 Friend WithEvents Timer1 As System.Windows.Forms.Timer |
初始化实例:
Me.components = New System.ComponentModel.Container ( ) Me.NotifyIcon1 = New System.Windows.Forms.NotifyIcon ( Me.components ) Me.ContextMenu1 = New System.Windows.Forms.ContextMenu ( ) Me.MenuItem1 = New System.Windows.Forms.MenuItem ( ) Me.MenuItem2 = New System.Windows.Forms.MenuItem ( ) Me.MenuItem3 = New System.Windows.Forms.MenuItem ( ) Me.Timer1 = New System.Windows.Forms.Timer ( Me.components ) Me.NotifyIcon1.ContextMenu = Me.ContextMenu1 Me.NotifyIcon1.Text = "VB.NET的托盘程序" Me.NotifyIcon1.Visible = True '设定托盘程序托盘区位置显示缺省图标 Me.NotifyIcon1.Icon = Icon1 '在ContextMenu实例中加入菜单项 Me.ContextMenu1.MenuItems.Add ( Me.MenuItem1 ) Me.ContextMenu1.MenuItems.Add ( Me.MenuItem2 ) Me.ContextMenu1.MenuItems.Add ( Me.MenuItem3 ) Me.MenuItem1.Index = 0 Me.MenuItem1.Text = "开始转动" Me.MenuItem2.Index = 1 Me.MenuItem2.Text = "停止转动" Me.MenuItem3.Index = 2 Me.MenuItem3.Text = "退出" Me.AutoScaleBaseSize = New System.Drawing.Size ( 6 , 14 ) Me.ClientSize = New System.Drawing.Size ( 292 , 273 ) Me.Name = "Form1" Me.ShowInTaskbar = False Me.Text = "VB.NET之WinForm编程动态托盘程序" Me.WindowState = System.Windows.Forms.FormWindowState.Minimized |
定义托盘程序中菜单项对应的事件,以及具体的处理方法:
'开始托盘图标的转动 Private Sub MenuItem1_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles MenuItem1.Click Timer1.Enabled = True End Sub '停止托盘图标的转动 Private Sub MenuItem2_Click ( ByVal sender As Object , ByVal e As System.EventArgs ) Handles MenuItem2.Click Timer1.Enabled = False End Sub '关闭程序,清除托盘资源 Private Sub MenuItem3_Click ( ByVal sender As Object , ByVal e As System.EventArgs ) Handles MenuItem3.Click NotifyIcon1.Dispose ( ) Application.Exit ( ) End Sub '根据标识符,来确定托盘图标类型 Private Sub Timer1_Tick ( ByVal sender As Object , ByVal e As System.EventArgs ) Handles Timer1.Tick If BeginFlag = True Then NotifyIcon1.Icon = Icon2 BeginFlag = False Else NotifyIcon1.Icon = Icon1 BeginFlag = True End If End Sub |
至此编写动态托盘程序的主要步骤就介绍完了,和上面的静态托盘程序相同,在运行此程序的时候必须保证此程序当前目录存在二个Icon文件,并且名称为"Icon1.ico"和"Icon2.ico"。这里并没有给出动态托盘程序的完整代码清单,读者只需要把上面这些关键步骤的代码覆盖到Form2.vb中的相应位置就可以得到动态托盘程序的源程序文件Form3.vb。这应该不算很难,下面是编译Form3.vb的命令:
Vbc /r:system.dll /r:system.windows.froms.dll /r:system.drawing.dll form2.vb |
成功编译、连接后就得到Form3.exe,下图是Form3.exe的运行界面:
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式