VB的系统托盘程序怎么做?

ldfaltxj 2010-09-16 04:37:57
想让软件已运行就最小化为托盘程序,在电脑的右下角,不知道应该怎么做?
...全文
201 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
橘子皮... 2010-10-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sysdzw 的回复:]
新建一个模块module1,代码如下:

VB code
Option Explicit

Public Const DefaultIconIndex = 1 '图标缺省索引
Public Const WM_LBUTTONDOWN = &H201 '按鼠标左键
Public Const WM_RBUTTONDOWN = &H204 '按鼠标右键
P……
[/Quote]
好象写的有问题啊,hwnd是什么啊,menu又是什么啊,根本运行不了
还有如果要最小化托盘后,强制图标一直显示在托盘里怎么写
Roock 2010-09-30
  • 打赏
  • 举报
回复
学习了。谢谢!
嗷嗷叫的老马 2010-09-30
  • 打赏
  • 举报
回复
WAR3窗口化鼠标锁定工具(VB6.0代码)

从这里自己拆,封装成了一个类,比较方便:)
lingll 2010-09-29
  • 打赏
  • 举报
回复
事实上vb的安装盘就带这个的源码
wo22ni 2010-09-29
  • 打赏
  • 举报
回复
这类源码。google搜一搜,源码一大堆,
射天狼 2010-09-29
  • 打赏
  • 举报
回复
无·法 2010-09-16
  • 打赏
  • 举报
回复
新建一个模块module1,代码如下:
Option Explicit

Public Const DefaultIconIndex = 1 '图标缺省索引
Public Const WM_LBUTTONDOWN = &H201 '按鼠标左键
Public Const WM_RBUTTONDOWN = &H204 '按鼠标右键
Public Const WM_RBUTTONUP = &H205
Public Const NIM_ADD = 0 '添加图标
Public Const NIM_MODIFY = 1 '修改图标
Public Const NIM_DELETE = 2 '删除图标
Public Const WM_MOUSEMOVE = &H200
Public Const NIF_MESSAGE = 1 'message 有效
Public Const NIF_ICON = 2 '图标操作(添加、修改、删除)有效
Public Const NIF_TIP = 4 'ToolTip(提示)有效

'图标操作
Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
'判断窗口是否最小化
Declare Function IsIconic Lib "user32" (ByVal hwnd As Long) As Long
'设置窗口位置和状态(position)的功能
Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
'定义类型
'通知栏图标状态
Public Type NOTIFYICONDATA
cbSize As Long
hwnd As Long
uID As Long
uFlags As Long
uCallbackMessage As Long
hIcon As Long
szTip As String * 64
End Type

'添加图标至通知栏
Public Function Icon_Add(iHwnd As Long, sTips As String, hIcon As Long, IconID As Long) As Long
'参数说明:iHwnd:窗口句柄,sTips:当鼠标移到通知栏图标上时显示的提示内容
'hIcon:图标句柄,IconID:图标Id号
Dim IconVa As NOTIFYICONDATA
With IconVa
.hwnd = iHwnd
.szTip = sTips + Chr$(0)
.hIcon = hIcon
.uID = IconID
.uCallbackMessage = WM_MOUSEMOVE
.cbSize = Len(IconVa)
.uFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP
Icon_Add = Shell_NotifyIcon(NIM_ADD, IconVa)
End With
End Function
'删除通知栏图标(参数说明同Icon_Add)
Function Icon_Del(iHwnd As Long, lIndex As Long) As Long
Dim IconVa As NOTIFYICONDATA
Dim L As Long
With IconVa
.hwnd = iHwnd
.uID = lIndex
.cbSize = Len(IconVa)
End With
Icon_Del = Shell_NotifyIcon(NIM_DELETE, IconVa)
End Function


在窗体中添加如下代码:
Option Explicit
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long

Private Sub Form_Load()
Call Icon_Add(Me.hwnd, Me.Caption, Me.Icon, 0) '将窗口图标加入通知栏
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim lMsg As Single
lMsg = X / Screen.TwipsPerPixelX
Select Case lMsg
Case WM_RBUTTONUP
SetForegroundWindow (hwnd)
PopupMenu menu
Case WM_LBUTTONDOWN
Me.WindowState = 0
Me.Show
' Call Icon_Del(Form1.hwnd, 0) '显示出窗体时删除托盘
End Select
End Sub

Private Sub Form_Resize() '判断窗口是否最小化状态,并且是按最小化按纽后第一次发生Resize事件
If IsIconic(Me.hwnd) <> 0 Then
Me.Visible = False
Call Icon_Add(Me.hwnd, Me.Caption, Me.Icon, 0)
End If
End Sub

Private Sub Form_Unload(Cancel As Integer)
Call Icon_Del(Form1.hwnd, 0)
End Sub
VB6.0将窗体最小化到系统托盘区 控件法,才是最适合最方便的。使用已被微软封装好的控件:csystray1(名称可自定)。 可直接使用 SysTray.ocx 控件。也可用VB打开工程,必要的话可作些改进(如更换图标、添加功能等),然后编译成ocx控件,可以随意命名。 注册控件方法: 32位系统的方法, 将ocx文件复制到c:\windows\system32下面, 运行命令regsvr32.exe Systray.ocx win7 64位系统的方法: 将ocx文件复制到c:\windows\syswow64下面, 运行命令c:\windows\syswow64\regsvr32.exe Systray.ocx 即可. vb中添加控件 ---------------------------------------------------------------------------------------------------------- 控件的属性和事件浅析: 该控件的InTray属性是用来设置是否显示在托盘中,True为显示在托盘,False为不显示; 该控件的TrayIcon属性是在托盘中显示的图标式样; 该控件的TrayTip属性是鼠标移动到该控件上面时,显示的提示文字; 该控件的重要事件是几个我们常用的鼠标事件:按下、放开、移动、双击,编程时就是利用这些事件达到在任务栏中控制程序的目的。 ------------------------------------------------------------------------------------------------------- 源代码如下: '使程序最小化时显示到系统托盘 Private Sub Form_Resize() If Me.WindowState = 1 Then '如程序为最小化则—— cSysTray1.InTray = True '隐藏到任务栏 Me.Visible = False '让程序界面不可见 End If End Sub '点击托盘图标后,让程序窗体显示出来 Private Sub CsysTray1_MouseDown(Button As Integer, Id As Long) Me.WindowState = 0 '程序回复到Normal状态 Me.Visible = True '从任务栏中清除图标 cSysTray1.InTray = False '令程序界面可见 Me.setfocus End Sub

1,453

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧