vb将程序最小化到托盘
程序最小化到托盘

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相重。
VBA修改窗口为最小化、最大化代码

VBA修改窗口为最小化、最大化代码 以下的VBA代码,均于Excel中的VBA有关,是用来修改应用程序的相关属性的。
代码收藏如下。
Application.WindowState = xlMinimized ‘窗口最小化 Application.WindowState =xlMaximized 最大化 Application.WindowState =xlNormal 为正常 Application.Cursor = xlIBeam ‘设置光标形状为Ⅰ字形 Application.Cursor = xlWait 为沙漏(等待)形 Application.Cursor = xlNormal 为正常 Application.StatusBar = "大众计算机" ’在地址栏中显示文本 Application.Caption= "大众计算机" 修改标题栏的文字. 其它的知识 Application.TemplatesPath ‘获取工作簿模板的位置 Application.CalculateFull ’重新计算所有打开的工作簿中的数据 Application.RecentFiles.Maximum = 3 ’将最近使用的文档列表数设为3 Application.RecentFiles(6).Open ’打开最近打开的文档中的第6个文档 Application.AutoCorrect.AddReplacement "good", "大众计算机" ’自动将输入的"good"更正为"大众计算机" Application.Dialogs(xlDialogPrint).Show ‘显示打印文档的对话框。
VB.NET编写托盘程序

编写托盘程序
编写托盘程序
托盘程序作为一类特殊的窗体,其快捷图标显示在系统托盘中,窗体本身则隐藏不可见。
在.NET之前版本的VB中编写托盘程序是十分困难的,但是提供的新的NotifyIcon组件却使VB初学者也能轻松编写一个这样的程序:
新建“Windows应用程序”,设置主窗体Opacity属性为0,FormBorderStyle属性为None,ShowInTaskbar属性为False,这样窗体将在启动后隐藏。
在窗体上放置一个NotifyIcon组件NotifyIcon1,一个ContextMenu(弹出菜单)组件 ContextMenu1,并根据需要为ContextMenu1添加菜单项。
设置NotifyIcon1的ICON属性,这个图标就是应用程序出现在系统托盘中的快捷图标;设置NotifyIcon1的Text属性为“ 托盘程序”,这就是鼠标移动到托盘图标时弹出的文字说明;设置NotifyIcon1的ContextMenu属性为ContextMenu1,也就是右键单击快捷图标时的弹出菜单为 ContextMenu1。
OK,按F5运行!
几乎不用编写代码,一个托盘程序就这样轻松实现了。
最小化到推盘

1、在资源中的Icon中导入一个自己喜欢的图标,ID命名为IDR_MAINFRAME,将先前的IDR_MAINFRAME的图标删除掉;2、在自己的Dialog头文件中定义一个变量NOTIFYICONDATA m_nid,关于该结构体的具体信息可以查阅MSDN;3、添加消息响应函数OnInitDialog(),并在该函数中添加以下代码,这样程序一启动,就在托盘中显示出了自己应用程序的图标。
//---------------------------托盘显示---------------------------------//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_MAINFRAME));strcpy(m_nid.szTip, "服务器程序"); // 信息提示条为"服务器程序",VS2008 UNICODE编码用wcscpy_s()函数Shell_NotifyIcon(NIM_ADD, &m_nid); // 在托盘区添加图标这时候编译,会报WM_SHOWTASK的错,因为该消息要自己定义。
4、在Dialog头文件中声明消息函数原型LRESULT OnShowTask(WPARAM wParam, LPARAM lParam);5、在Dialog源文件中进行消息映射ON_MESSAGE(WM_SHOWTASK,OnShowTask)6、在Dialog源文件中添加自定义的消息响应代码,左键双击弹出应用程序主窗口,右键单击弹出菜单。
最小化到托盘

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控件(编译前记得要先把只读属性修改掉,有时候会提示要先保存,直接保存。),
用VisualC#做托盘程序.net-电脑资料

用VisualC#做托盘程序.net-电脑资料下一页1 2 3 所谓托盘程序顾名思义就是象托起的盘子一样的程序,。
而所谓的托起的盘子就是程序运行中显示出的图标,而托起的位置就是视窗系统的的工具栏了。
托盘程序具有直观、占用屏幕空间较小并且可以为它定义多个功能菜单,这就给操作者带来了方便,所以下一页 1 2 3所谓托盘程序顾名思义就是象托起的盘子一样的程序。
而所谓的托起的盘子就是程序运行中显示出的图标,而托起的位置就是视窗系统的的工具栏了。
托盘程序具有直观、占用屏幕空间较小并且可以为它定义多个功能菜单,这就给操作者带来了方便,所以越来越多的程序设计者都把程序设计成托盘这种方式。
我们已经看过了用其他语言设计托盘程序的例子,其中的大部分,整个设计过程还是相对烦琐的。
而对于微软公司极力推荐的下一代程序开发语言--Visual C#来说,却可以十分方便设计出一个托盘程序。
本文就是介绍Visual C#设计托盘程序的具体过程。
首先来介绍一下本文中设计托盘程序所需要的环境:(1).微软公司视窗2000服务器版(2) FrameWork SDK Beta 2一.托盘程序的主要步骤及解决方法:为什么说用Visual C#可以十分方便的做一个托盘程序,主要的原因是在.Net框架的软件开发包( .Net FrameWork SDK )中的WinForm 组件中定义了一个专门用来开发托盘程序的组件--NotifyIcon组件,电脑资料《用Visual C#做托盘程序.net》(https://www.)。
下面就来介绍一下这个组件的具体用法和程序设计中的主要的技巧。
(1).如何在程序运行后隐藏窗体:我们知道托盘程序运行后是无法看见主窗体的,他只会显示在工具栏上。
在用Visual C#设计此类程序的时候,可以用二种方法使得程序运行后不显示主窗体。
其中一种方法是重载主窗体中的OnActivated( )事件,OnActivated( )事件是在窗体激活的时候才触发的。
最小化到托盘

系统最小化到托盘一、托盘简介所谓的“托盘”,在Windows系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那一部分。
在程序最小化或挂起时,但有不希望占据任务栏的时候,就可以把程序放到托盘区。
二、托盘编程相关函数其实,把程序放到托盘上的本质就是先在托盘区绘制一个图标,然后把程序隐藏不见,再对托盘的图标进行消息处理,就可以了。
绘制图标以及确定图标所传送消息的函数只有一个,WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(DWORD dwMessage,PNOTIFYICONDATA pnid);这个函数负责向系统传递消息,以添加、修改或删除托盘区的图标。
她的返回值是个布尔类型的。
就是说,如果返回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。
uID : 在工程中定义的图标IDuFlags : 这个成员标志着其他哪些成员的数据是有效的,分别为NIF_ICON, NIF_MESSAGE, NIF_TIP,分别代表着数据有效的成员是hIcon, uCallbackMessage, szTip。
怎么能让VB 程序最小化时在托盘显示呀急急急!~希望VB高手帮忙!

给你个例子吧建立一个frmmain主窗体Option ExplicitPrivate Sub Form_Load()'初始化imgIcon控件的Picture属性imgIcon.Picture = LoadPicture(App.Path & "\" & "heart.ico") mnuTrayShow.Enabled = False'初始化NOTIFYICONDATA数据结构Dim nid As NOTIFYICONDATAnid.cbSize = Len(nid)nid.hwnd = frmTemp.hwndnid.uId = 1&nid.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE nid.uCallbackMessage = WM_NOTIFYICONnid.hicon = imgIcon.Picturenid.szTip = "系统托盘中的图标" & Chr(0)'调用Shell_NotifyIcon函数将图标加入到系统托盘中Shell_NotifyIcon NIM_ADD, nidEnd SubPrivate Sub Form_Unload(Cancel As Integer)'设置自定义类型的变量的内容Dim nid As NOTIFYICONDATAnid.cbSize = Len(nid)nid.hwnd = frmTemp.hwndnid.uId = 1&nid.uFlags = 0'调用Shell_NotifyIcon方法来删除系统托盘中的图标Shell_NotifyIcon NIM_DELETE, nidUnload frmTempEnd SubPrivate Sub mnuTrayExit_Click()Unload MeEnd SubPrivate Sub mnuTrayHide_Click()'隐藏窗体,并相应改变菜单项的状态Me.HidemnuTrayHide.Enabled = FalsemnuTrayShow.Enabled = TrueEnd SubPrivate Sub mnuTrayIcon_Click()'设置dlgOpen公用对话框的属性,以便取得相应的图标文件dlgOpen.Filter = "图标文件(*.ico)|*.ico"dlgOpen.Flags = cdlOFNFileMustExistdlgOpen.ShowOpenIf dlgOpen.FileName = "" Then Exit Sub'根据所取得图标文件,来改变imgIcon文件的属性imgIcon.Picture = LoadPicture(dlgOpen.FileName)'设置NOTIFYICONDATA数据结构Dim nid As NOTIFYICONDATAnid.cbSize = Len(nid)nid.hwnd = frmTemp.hwndnid.uId = 1&nid.uFlags = NIF_ICONnid.hicon = imgIcon.Picture'调用Shell_NotifyIcon函数来修改系统托盘中的图标Shell_NotifyIcon NIM_MODIFY, nidEnd SubPrivate Sub mnuTrayShow_Click()'显示窗体,并相应改变菜单项的状态Me.ShowmnuTrayHide.Enabled = TruemnuTrayShow.Enabled = FalseEnd SubPrivate Sub mnuTrayTip_Click()Dim str As Stringstr = InputBox("输入系统托盘中的图标的提示信息:", "提示信息") If str = "" Then Exit Sub'设置NOTIFYICONDATA数据结构Dim nid As NOTIFYICONDATAnid.cbSize = Len(nid)nid.hwnd = frmTemp.hwndnid.uId = 1&nid.uFlags = NIF_TIPnid.szTip = str & Chr(0)'调用Shell_NotifyIcon函数来修改系统托盘中的图标的提示Shell_NotifyIcon NIM_MODIFY, nidEnd Sub再建立一个空窗体叫frmTemp再建一个模块,名字随便了Option Explicit'声明Shell_NotifyIcon函数,用于将图标加入到系统托盘中Public Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean'声明自定义的数据类型NOTIFYICONDATAPublic Type NOTIFYICONDATAcbSize As Longhwnd As LonguId As LonguFlags As LonguCallbackMessage As Longhicon As LongszTip As String * 64End Type'声明常量Public Const NIM_ADD = &H0Public Const NIM_MODIFY = &H1Public Const NIM_DELETE = &H2Public Const NIF_MESSAGE = &H1Public Const NIF_ICON = &H2Public Const NIF_TIP = &H4'定义SetWindowLong,用以改变frmTemp窗体的窗体函数Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long'定义事件的常数代码Public Const WM_LBUTTONDOWN = &H201Public Const WM_RBUTTONDOWN = &H204Public Const WM_USER = &H400'定义自定义的事件WM_NOTIFYICONPublic Const WM_NOTIFYICON = WM_USER + &H100'替换窗口处理函数Public Const GWL_WNDPROC = (-4)'该函数为frmTest的窗体处理函数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As LongPublic Declare Function DrawIcon Lib "user32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal hicon As Long) As LongPublic Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As LongPublic Declare Function TrackPopupMenu Lib "user32" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal x As Long, ByVal y As Long, ByVal nReserved As Long, ByVal hwnd As Long, lprc As Any) As LongPublic Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As LongPublic Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As LongPublic Type POINTAPIx As Longy As LongEnd TypePublic Type NOTIFYICONDATAcbSize As Long '结构的长度hwnd As Long '消息接收窗口的句柄uID As Long '图标的标识uFlags As Long '设置参数uCallbackMessage As Long '回调消息的值hicon As Long '图标句柄szTip As String * 64 '提示字符串End TypePublic Const NIM_ADD = 0 '添加图标Public Const NIM_MODIFY = 1 '修改图标Public Const NIM_DELETE = 2 '删除图标Public Const NIF_MESSAGE = 1 '当有鼠标事件发生时产生消息Public Const NIF_ICON = 2 'Public Const NIF_TIP = 4 '图标有提示字符串Public Const WM_LBUTTONDOWN = &H201Public Const WM_RBUTTONDOWN = &H204Public Const WM_USER = &H400Public Const WM_NOTIFYICON = WM_USER + &H100 Public Const WM_COMMAND = &H111Public Const WM_DESTROY = &H2Public Const WM_DRA WITEM = &H2BPublic Const WM_INITDIALOG = &H110Public Const WM_PAINT = &HFPublic Const WM_MENUSELECT = &H11FPublic Const GWL_WNDPROC = (-4) '替换窗口处理函数Dim pmenu As LongDim submenu As LongGlobal lproc As LongFunction CMenu() As Boolean'这个函数获得Form1的子菜单Dim l As LongDim l1 As Longpmenu = GetMenu(Form1.hwnd)submenu = GetSubMenu(pmenu, 0)If submenu ThenCMenu = TrueElseCMenu = FalseEnd IfEnd FunctionFunction Icon_Del(ihwnd As Long) As LongDim ano As NOTIFYICONDATADim l As Longano.hwnd = ihwndano.uID = 0ano.cbSize = Len(ano)'删除图标Icon_Del = Shell_NotifyIcon(NIM_DELETE, ano)End Function'这个函数接收图标句柄和窗口句柄并且新建图标Function Icon_Add(ihwnd As Long, hicon As Long) As Long Dim ano As NOTIFYICONDATADim astr As String'为图标添加提示行astr = LTrim$(InputBox$("Input the tips you wanted to add."))ano.szTip = astr + Chr$(0)'设置消息接收窗口ano.hwnd = ihwndano.uID = 0'图标有提示并且可以发送消息ano.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGEano.hicon = hiconano.cbSize = Len(ano)'将图标的回调消息设置为WM_NOTIFYICON,当在图标区域有鼠标消息,系统就会向'消息接收窗口发送WM_NOTIFYICON消息。
ano.uCallbackMessage = WM_NOTIFYICONIcon_Add = Shell_NotifyIcon(NIM_ADD, ano)End FunctionFunction DialogProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long'该函数为Form2的窗口处理函数。
Dim l As LongDim l1 As LongDim po As POINTAPISelect Case uMsgCase WM_INITDIALOGCase WM_DESTROYCase WM_COMMANDCase WM_DRAWITEMCase WM_NOTIFYICON '有鼠标事件产生Select Case lParamCase WM_LBUTTONDOWN '按下鼠标左键'提示是否删除图标l = MsgBox("Delete icon?", vbYesNo)If l = vbYes Then'删除图标同时恢复窗口处理函数l = Icon_Del(hwnd)l = SetWindowLong(Form2.hwnd, GWL_WNDPROC, lproc)Form1.ShowElseEnd IfCase WM_RBUTTONDOWN '按下鼠标右键弹出菜单If submenu Thenl = GetCursorPos(po) '获的光标位置'在光标位置处弹出菜单l1 = TrackPopupMenu(submenu, (TPM_LEFTALIGN Or TPM_RIGHTBUTTON), po.x, po.y, 0, Form1.hwnd, vbNull)End IfCase ElseEnd SelectCase ElseDialogProc = FalseEnd SelectDialogProc = TrueEnd FunctionPrivate Sub CAdd_Click()Dim l As LongIf (Icon_Add(Form2.hwnd, Picture1.Picture)) Thenxb = CMenu() '添加弹出菜单CAdd.Enabled = FalseForm1.Hide'将DialogProc函数设置为Form2的窗口处理函数并且保存原来窗口处理函数句柄lproc = SetWindowLong(Form2.hwnd, GWL_WNDPROC, AddressOf DialogProc) End IfEnd SubPrivate Sub CEnd_Click()EndEnd SubPrivate Sub mItem_Click(Index As Integer)MsgBox "You click item " + Str$(Index + 1)End Sub。