希望可以实现主程序与托盘分离,像杀毒软件那样,可以自启动托盘。通过托盘可以打开主程序!(上面部分都已经实现)。怎么样直接执行主程序,执行时判断托盘如果打开则执行主程序,未打开则先打开托盘,再执行主程序!
我是菜鸟,希望可以讲得稍微详细些!跪谢!
我是菜鸟,希望可以讲得稍微详细些!跪谢!
解决方案 »
- 控件事件触发问题
- VB编写的程序安装时出现问题。
- ***讨论,如何在一句SQL语句中操作SQL数据库的一张表和ACCESS数据库中的一张表。说者有分!!!
- 关于VB的定位打印
- [求助]如何刷QQ空间日志访问量?
- vb的Timer事件可不可出现交叉现象
- 奇怪的循环:有一个for循环,循环变量为single,初值为30,终值为80,步距为0.1,可是到31.4后便成了31.400001
- VB 字典对象Scription.Dictionary 内部存放数组的只读问题
- 有谁知道下面几个api函数的用法?
- 在局域网通讯小程序的问题!请大家帮忙!
- 第二次导出到EXCEL时出错!!!
- vb6自带的winapi32.txt是不是很旧? 有无更新的啊?
还有,托盘本来不应该占用很多资源吧?如果只是把主程序隐藏,那样不是很占资源?
托盘肯定也要.exe,那能不能一个软件有几个.exe?怎么实现?就像瑞星防火墙那样!
Public Const NIF_ICON = &H2
Public Const NIF_MESSAGE = &H1
Public Const NIF_TIP = &H4
Public Const NIM_ADD = &H0
Public Const NIM_DELETE = &H2
Public Const WM_MOUSEMOVE = &H200
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONUP = &H202
Public Const WM_LBUTTONDBLCLK = &H203
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_RBUTTONUP = &H205
Public Const WM_RBUTTONDBLCLK = &H206 Public Const SW_RESTORE = 9
Public Const SW_HIDE = 0 Public nfIconData As NOTIFYICONDATA
Public Type NOTIFYICONDATA
cbSize As Long
hWnd As Long
uID As Long
uFlags As Long
uCallbackMessage As Long
hIcon As Long
szTip As String * MAX_TOOLTIP
End Type Public Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long '4、在Form1的Load事件中写下如下代码: Private Sub Form_Load() '以下把程序放入System Tray====================================System Tray Begin
With 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 With
Call Shell_NotifyIcon(NIM_ADD, nfIconData)
'=============================================================System Tray End
Me.Hide
End 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 Single
lMsg = X / Screen.TwipsPerPixelX
Select Case lMsg
Case 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 Else
End Select
End Sub 7、现在将程序保存起来运行看看系统托盘处是否增加了一个本工程的图标。单击此图标,Form1就自动弹出来了。