我搜索了很多关于生成托盘图标的资料,发现都是使用的Shell_notifyicon这个API函数,可是win2000下找不到这个函数啊,我查了很多资料都说这个API在windows2000里不支持,我该怎么办?请教高手赐教,一百分全给你,谁最先给我答案我就全给谁。
解决方案 »
- ScriptControl-能实现字符串为内存变量吗?
- 如果用API设置窗体上的某个按钮是否可用?
- VB建立VPN后 怎样自动添加目标IP到VPN连接属性里
- 请教一个客户端与服务端的Winsock连接问题:))))))
- 求ls0242 (ls0242) 以C/S源碼
- 请问,怎样得到指定目录下的文件名、文件夹名?
- 为什么combobox控件的change事件不触发
- 我也升了一个角,多谢网友支持。
- datagrid的问题?
- vb中有多少东西可以做成透明的,请把代码告诉我!
- 一个很弱的问题:怎样用sendkey 或 keybd_event 发送到 特定的工作环境中
- 关于MSF控件的合并????(重在参与)
Public Const WM_LBUTTONDOWN = &H201 '按鼠标左键
Public Const WM_RBUTTONDOWN = &H204 '按鼠标右键Public Const NIM_ADD = 0 '添加图标
Public Const NIM_MODIFY = 1 '修改图标
Public Const NIM_DELETE = 2 '删除图标Public Const NIF_MESSAGE = 1 'message 有效
Public Const NIF_ICON = 2 '图标操作(添加、修改、删除)有效
Public Const NIF_TIP = 4 'ToolTip(提示)有效'API函数声明
'图标操作
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_LBUTTONDOWN
.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
'修改通知栏图标(参数说明同Icon_Add)
Public Function Icon_Modify(iHwnd As Long, sTips As String, hIcon As Long, IconID As Long) As Long
Dim IconVa As NOTIFYICONDATA
With IconVa
.hwnd = iHwnd
.szTip = sTips + Chr$(0)
.hIcon = hIcon
.uID = IconID
.uCallbackMessage = WM_LBUTTONDOWN
.cbSize = Len(IconVa)
.uFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP
Icon_Modify = Shell_NotifyIcon(NIM_MODIFY, IconVa)
End With
End Function
----------------------------------------------
以上代码放到模块中
Option ExplicitPrivate 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 TypePrivate Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONDBLCLK = &H203
Private Const WM_RBUTTONUP = &H205
Private Const NIM_ADD = &H0
Private Const NIM_MODIFY = &H1
Private Const NIF_MESSAGE = &H1
Private Const NIM_DELETE = &H2
Private Const NIF_ICON = &H2
Private Const NIF_TIP = &H4
Private Const WM_MOUSEMOVE = &H200Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As LongDim TrayIcon As NOTIFYICONDATA, bolFlag As BooleanPrivate Sub Form_Load()
TrayIcon.cbSize = Len(TrayIcon)
TrayIcon.hWnd = hWnd
TrayIcon.uId = vbNull
TrayIcon.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
TrayIcon.ucallbackMessage = WM_MOUSEMOVE
TrayIcon.hIcon = Me.Icon
TrayIcon.szTip = "拖盘" & Chr(0)
'在系统栏添加拖盘
Call Shell_NotifyIcon(NIM_ADD, TrayIcon)
End SubPrivate Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
'构造系统拖盘结构
TrayIcon.cbSize = Len(TrayIcon)
TrayIcon.hWnd = Me.hWnd
TrayIcon.uId = vbNull
'删除系统栏的拖盘
Call Shell_NotifyIcon(NIM_DELETE, TrayIcon)
End SubPrivate Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
On Error Resume Next
Dim Message As Long
Message = X / Screen.TwipsPerPixelX '判断鼠标消息,执行不同的功能
Select Case Message
Case WM_LBUTTONDOWN
'点击拖盘
Case WM_RBUTTONUP
SetForegroundWindow Me.hWnd
'按右键弹出菜单
'PopupMenu mnuPopup
End Select
End SubPrivate Sub Timer1_Timer()
bolFlag = Not bolFlag
TrayIcon.cbSize = Len(TrayIcon)
TrayIcon.hWnd = hWnd
TrayIcon.uId = vbNull
TrayIcon.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
TrayIcon.ucallbackMessage = WM_MOUSEMOVE
TrayIcon.hIcon = IIf(bolFlag, Me.Icon, Picture1.Picture)
TrayIcon.szTip = "拖盘" & Chr(0)
'在系统栏添加拖盘
Call Shell_NotifyIcon(NIM_MODIFY, TrayIcon)
End Sub
Option Explicit
Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean
Private Const NIM_ADD = &H0
Private Const NIM_MODIFY = &H1
Private Const NIM_DELETE = &H2
Private Const NIF_MESSAGE = &H1
Private Const NIF_ICON = &H2
Private Const NIF_TIP = &H4
Private Const WM_MOUSEMOVE = &H200
Private Const WM_LBUTTONDBLCLK = &H203
Private Const WM_RBUTTONDBLCLK = &H206
' 结构声明
Private 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 TypeDim NotifyData As NOTIFYICONDATA
Dim Img_Int As IntegerPrivate Sub Form_Load()
Timer1.Interval = 500 ' 设置计时器时间间隔
Timer1.Enabled = True ' 使计时器可用
' 隐藏图片
For Img_Int = 0 To 3
Icon_Img(Img_Int).Visible = False
Next Img_Int
Img_Int = 0 ' 初始图片索引
' 调整标签位置,使居中
Shadow_Lab1.Left = (Me.ScaleWidth - Shadow_Lab1.Width) / 2
Shadow_Lab1.Top = (Me.ScaleHeight - Shadow_Lab1.Height) / 2
' 制造阴影效果
Shadow_Lab2.Left = Shadow_Lab1.Left + 80
Shadow_Lab2.Top = Shadow_Lab1.Top + 80
Shadow_Lab1.ZOrder '调整标签顺序
End SubPrivate Sub SysTray_Menu_Click()
' 在 SysTray上添加一个图标
NotifyData.cbSize = Len(NotifyData)
NotifyData.hwnd = Demo_Frm.hwnd
NotifyData.uID = vbNull
NotifyData.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
NotifyData.uCallbackMessage = WM_MOUSEMOVE
NotifyData.hIcon = Demo_Frm.Icon
NotifyData.szTip = "双击以显示窗体" & vbNullChar
Shell_NotifyIcon NIM_ADD, NotifyData ' 添加图标
Demo_Frm.Hide ' 隐藏窗体
End Sub' 循环显示图片为图标,并在托盘中显示
Private Sub Timer1_Timer()
Img_Int = Img_Int + 1
If Img_Int = 4 Then
Img_Int = 0
End If
Me.Icon = Icon_Img(Img_Int).Picture
' 更新 NOTIFYICONDATA 的值,以反映动画的改变
NotifyData.cbSize = Len(NotifyData)
NotifyData.hwnd = Demo_Frm.hwnd
NotifyData.uID = vbNull
NotifyData.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
NotifyData.hIcon = Demo_Frm.Icon Shell_NotifyIcon NIM_MODIFY, NotifyData
End Sub' 判断用户是否双击系统托盘中的图标,若双击则退出系统托盘
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If CLng(X / Screen.TwipsPerPixelX) = WM_LBUTTONDBLCLK Or CLng(X / Screen.TwipsPerPixelX) = WM_RBUTTONDBLCLK Then
Shell_NotifyIcon NIM_DELETE, NotifyData
Demo_Frm.Show
Demo_Frm.WindowState = 0
End If
End Sub' 退出程序
Private Sub Exit_Menu_Click()
Shell_NotifyIcon NIM_DELETE, NotifyData
Set Demo_Frm = Nothing
End
End SubPrivate Sub Form_Terminate()
'删除SysTray上的图标
Shell_NotifyIcon NIM_DELETE, NotifyData
End SubPrivate Sub Form_Unload(Cancel As Integer)
'删除SysTray上的图标
Shell_NotifyIcon NIM_DELETE, NotifyData
Call FormUnload
End Sub' 卸载窗体时
Public Sub FormUnload()
Set Demo_Frm = Nothing
End
End Sub