Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long Public Declare Function DrawIcon Lib "user32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal hicon As Long) As Long Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long Public 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 Long Public Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long Public Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As LongPublic Type POINTAPI x As Long y As Long End TypePublic 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 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 = &H201 Public Const WM_RBUTTONDOWN = &H204 Public Const WM_USER = &H400 Public Const WM_NOTIFYICON = WM_USER + &H100 Public Const WM_COMMAND = &H111 Public Const WM_DESTROY = &H2 Public Const WM_DRAWITEM = &H2B Public Const WM_INITDIALOG = &H110 Public Const WM_PAINT = &HF Public Const WM_MENUSELECT = &H11FPublic Const GWL_WNDPROC = (-4) '替换窗口处理函数Dim pmenu As Long Dim submenu As LongGlobal lproc As Long Function CMenu() As Boolean '这个函数获得Form1的子菜单 Dim l As Long Dim l1 As Long
pmenu = GetMenu(Form1.hwnd) submenu = GetSubMenu(pmenu, 0) If submenu Then CMenu = True Else CMenu = False End If End Function Function Icon_Del(ihwnd As Long) As Long Dim ano As NOTIFYICONDATA Dim l As Long
ano.hwnd = ihwnd ano.uID = 0 ano.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 NOTIFYICONDATA Dim astr As String
'为图标添加提示行 astr = LTrim$("中建科技") ano.szTip = astr + Chr$(0) '设置消息接收窗口 ano.hwnd = ihwnd ano.uID = 0 '图标有提示并且可以发送消息 ano.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE ano.hicon = hicon ano.cbSize = Len(ano) '将图标的回调消息设置为WM_NOTIFYICON,当在图标区域有鼠标消息,系统就会向 '消息接收窗口发送WM_NOTIFYICON消息。 ano.uCallbackMessage = WM_NOTIFYICON Icon_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 Long Dim l1 As Long Dim po As POINTAPI
Select Case uMsg Case WM_INITDIALOG Case WM_DESTROY Case WM_COMMAND Case WM_DRAWITEM Case WM_NOTIFYICON '有鼠标事件产生 Select Case lParam Case WM_LBUTTONDOWN '按下鼠标左键 '提示是否删除图标 Form3.Show Case WM_RBUTTONDOWN '按下鼠标右键弹出菜单 Form3.Show Case Else End Select Case Else DialogProc = False End Select DialogProc = True End Function
问题一: sub Form_resize() Me.WindowState=1 End Sub问题二: 右键点工具栏,点“部件(O)”,找到ShockwaveFlash控件,打勾,确定,用这个控件就可以了。(这年头,没这个东西的人比女人的胡子还少了。)问题三:教你怎么结贴:登陆CSDN,点“我要去社区HOT”,打开后点左上角的“显示导航栏”,打开后点“我的技术社区”,打开后点“我的问题”,打开后点“两个基础问题,谢谢!”,打开后点中间靠右的“管理”,打开后点“WallesCai(今年过节不吃饭,要吃就吃减肥茶!) ”右面的文本框,输入50,再点上面的“密码”后的那个文本框,输入密码,点旁边的“给分”按钮,系统提示“确认要结贴吗??”,点“确定”千万注意!一步也不能错哦。否则你的VB会崩溃,PC会爆炸,硬盘会自动Format哦!
1.程序在后台运行,比如象监视程序一样,在任务栏中有图标显示 下面是一个模块。放好后直接Call AddToTray(Me, mnuTray) 调用托盘过程 结束程序的时候RemoveFromTray 移除托盘图标就可以了。 AddToTray(Me, mnuTray)的参数,me是一个Form,mnuTray是你点击托盘图标时要弹出的菜单。Option ExplicitPublic OldWindowProc As Long Public TheForm As Form Public TheMenu As MenuDeclare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As LongPublic Const WM_USER = &H400 Public Const WM_LBUTTONUP = &H202 Public Const WM_MBUTTONUP = &H208 Public Const WM_RBUTTONUP = &H205 Public Const TRAY_CALLBACK = (WM_USER + 1001&) Public Const GWL_WNDPROC = (-4) Public Const GWL_USERDATA = (-21) Public Const NIF_ICON = &H2 Public Const NIF_TIP = &H4 Public Const NIM_ADD = &H0 Public Const NIF_MESSAGE = &H1 Public Const NIM_MODIFY = &H1 Public Const NIM_DELETE = &H2'记录 设置托盘图标的数据 的数据类型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 * 64 End Type'TheData变量记录设置托盘图标的数据 Private TheData As NOTIFYICONDATA' 新的窗口过程--主程序中采用SetWindowLong函数改变了窗口函数的地址, ' 消息转向由NewWindowProc处理 Public Function NewWindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If Msg = TRAY_CALLBACK Then '如果用户点击了托盘中的图标,则进行判断是点击了左键还是右键
If lParam = WM_LBUTTONUP Then '如果点击了左键 If TheForm.WindowState = vbMinimized Then '如果窗体的状态是最小化 TheForm.WindowState = vbNormal '恢复窗体 TheForm.SetFocus '使窗体获得焦点 Else TheForm.WindowState = vbMinimized '反之则最小化 End If Exit Function End If If lParam = WM_RBUTTONUP Then '如果点击了右键 TheForm.PopupMenu TheMenu '则弹出右键菜单 Exit Function End If End If
NewWindowProc = CallWindowProc( _ OldWindowProc, hwnd, Msg, _ wParam, lParam) '如果是其他类型的消息则传递给原有默认的窗口函数End Function' 把主窗体的图标(frmMain.icon属性可改变)添加到托盘中 Public Sub AddToTray(frm As Form, mnu As Menu) '保存当前窗体和菜单信息 Set TheForm = frm Set TheMenu = mnu
With TheData '将主窗体图标添加在托盘中 .uID = 0 .hwnd = frm.hwnd .cbSize = Len(TheData) .hIcon = frm.Icon.Handle .uFlags = NIF_ICON .uCallbackMessage = TRAY_CALLBACK .uFlags = .uFlags Or NIF_MESSAGE .cbSize = Len(TheData) End With Shell_NotifyIcon NIM_ADD, TheData '根据前面定义NIM_ADD,设置为“添加模式” End Sub' 删除系统托盘中的图标 Public Sub RemoveFromTray()
With TheData .uFlags = 0 End With Shell_NotifyIcon NIM_DELETE, TheData
SetWindowLong TheForm.hwnd, GWL_WNDPROC, _ OldWindowProc End SubPublic Sub SetTrayTip(tip As String) With TheData '删除托盘中的图标 .szTip = tip & vbNullChar .uFlags = NIF_TIP End With Shell_NotifyIcon NIM_MODIFY, TheData '根据前面定义NIM_DELETE,设置为“删除模式” End SubPublic Sub SetTrayIcon(pic As Picture) ' 设置托盘的图标 '判断一下pic中存放的是不是图标 If pic.Type <> vbPicTypeIcon Then Exit Sub
With TheData '更换图标为pic中存放的图标 .hIcon = pic.Handle .uFlags = NIF_ICON End With Shell_NotifyIcon NIM_MODIFY, TheData End Sub
http://community.csdn.net/Expert/topic/3366/3366195.xml?temp=.2416193
窗体里加一个timer
不知道是不是你要的效果
假如你安装过flash的话,vb会检测到flash控件的
等 级:
信 誉 值: 61 大哥,你信 誉 值咋这低,我头一回看到!
你有N个帖子没结?????????
Public Declare Function DrawIcon Lib "user32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal hicon As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Public 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 Long
Public Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As LongPublic Type POINTAPI
x As Long
y As Long
End TypePublic 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 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 = &H201
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_USER = &H400
Public Const WM_NOTIFYICON = WM_USER + &H100
Public Const WM_COMMAND = &H111
Public Const WM_DESTROY = &H2
Public Const WM_DRAWITEM = &H2B
Public Const WM_INITDIALOG = &H110
Public Const WM_PAINT = &HF
Public Const WM_MENUSELECT = &H11FPublic Const GWL_WNDPROC = (-4) '替换窗口处理函数Dim pmenu As Long
Dim submenu As LongGlobal lproc As Long
Function CMenu() As Boolean
'这个函数获得Form1的子菜单
Dim l As Long
Dim l1 As Long
pmenu = GetMenu(Form1.hwnd)
submenu = GetSubMenu(pmenu, 0)
If submenu Then
CMenu = True
Else
CMenu = False
End If
End Function
Function Icon_Del(ihwnd As Long) As Long
Dim ano As NOTIFYICONDATA
Dim l As Long
ano.hwnd = ihwnd
ano.uID = 0
ano.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 NOTIFYICONDATA
Dim astr As String
'为图标添加提示行
astr = LTrim$("中建科技")
ano.szTip = astr + Chr$(0)
'设置消息接收窗口
ano.hwnd = ihwnd
ano.uID = 0
'图标有提示并且可以发送消息
ano.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
ano.hicon = hicon
ano.cbSize = Len(ano)
'将图标的回调消息设置为WM_NOTIFYICON,当在图标区域有鼠标消息,系统就会向
'消息接收窗口发送WM_NOTIFYICON消息。
ano.uCallbackMessage = WM_NOTIFYICON
Icon_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 Long
Dim l1 As Long
Dim po As POINTAPI
Select Case uMsg
Case WM_INITDIALOG
Case WM_DESTROY
Case WM_COMMAND
Case WM_DRAWITEM
Case WM_NOTIFYICON '有鼠标事件产生
Select Case lParam
Case WM_LBUTTONDOWN '按下鼠标左键
'提示是否删除图标
Form3.Show
Case WM_RBUTTONDOWN '按下鼠标右键弹出菜单
Form3.Show
Case Else
End Select
Case Else
DialogProc = False
End Select
DialogProc = True
End Function
sub Form_resize()
Me.WindowState=1
End Sub问题二:
右键点工具栏,点“部件(O)”,找到ShockwaveFlash控件,打勾,确定,用这个控件就可以了。(这年头,没这个东西的人比女人的胡子还少了。)问题三:教你怎么结贴:登陆CSDN,点“我要去社区HOT”,打开后点左上角的“显示导航栏”,打开后点“我的技术社区”,打开后点“我的问题”,打开后点“两个基础问题,谢谢!”,打开后点中间靠右的“管理”,打开后点“WallesCai(今年过节不吃饭,要吃就吃减肥茶!) ”右面的文本框,输入50,再点上面的“密码”后的那个文本框,输入密码,点旁边的“给分”按钮,系统提示“确认要结贴吗??”,点“确定”千万注意!一步也不能错哦。否则你的VB会崩溃,PC会爆炸,硬盘会自动Format哦!
右键点工具栏,点“部件(O)”,找到ShockwaveFlash控件,打勾,确定,用这个控件就可以了
用法:movive="c:\xx.swf"
loop是否循环播放
playing=true\false控制是否播放
下面是一个模块。放好后直接Call AddToTray(Me, mnuTray) 调用托盘过程
结束程序的时候RemoveFromTray 移除托盘图标就可以了。
AddToTray(Me, mnuTray)的参数,me是一个Form,mnuTray是你点击托盘图标时要弹出的菜单。Option ExplicitPublic OldWindowProc As Long
Public TheForm As Form
Public TheMenu As MenuDeclare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As LongPublic Const WM_USER = &H400
Public Const WM_LBUTTONUP = &H202
Public Const WM_MBUTTONUP = &H208
Public Const WM_RBUTTONUP = &H205
Public Const TRAY_CALLBACK = (WM_USER + 1001&)
Public Const GWL_WNDPROC = (-4)
Public Const GWL_USERDATA = (-21)
Public Const NIF_ICON = &H2
Public Const NIF_TIP = &H4
Public Const NIM_ADD = &H0
Public Const NIF_MESSAGE = &H1
Public Const NIM_MODIFY = &H1
Public Const NIM_DELETE = &H2'记录 设置托盘图标的数据 的数据类型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 * 64
End Type'TheData变量记录设置托盘图标的数据
Private TheData As NOTIFYICONDATA' 新的窗口过程--主程序中采用SetWindowLong函数改变了窗口函数的地址,
' 消息转向由NewWindowProc处理
Public Function NewWindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = TRAY_CALLBACK Then '如果用户点击了托盘中的图标,则进行判断是点击了左键还是右键
If lParam = WM_LBUTTONUP Then '如果点击了左键
If TheForm.WindowState = vbMinimized Then '如果窗体的状态是最小化
TheForm.WindowState = vbNormal '恢复窗体
TheForm.SetFocus '使窗体获得焦点
Else
TheForm.WindowState = vbMinimized '反之则最小化
End If
Exit Function
End If
If lParam = WM_RBUTTONUP Then '如果点击了右键
TheForm.PopupMenu TheMenu '则弹出右键菜单
Exit Function
End If
End If
NewWindowProc = CallWindowProc( _
OldWindowProc, hwnd, Msg, _
wParam, lParam) '如果是其他类型的消息则传递给原有默认的窗口函数End Function' 把主窗体的图标(frmMain.icon属性可改变)添加到托盘中
Public Sub AddToTray(frm As Form, mnu As Menu)
'保存当前窗体和菜单信息
Set TheForm = frm
Set TheMenu = mnu
'GWL_WNDPROC获得该窗口的窗口函数的地址
OldWindowProc = SetWindowLong(frm.hwnd, _
GWL_WNDPROC, AddressOf NewWindowProc)
With TheData '将主窗体图标添加在托盘中
.uID = 0
.hwnd = frm.hwnd
.cbSize = Len(TheData)
.hIcon = frm.Icon.Handle
.uFlags = NIF_ICON
.uCallbackMessage = TRAY_CALLBACK
.uFlags = .uFlags Or NIF_MESSAGE
.cbSize = Len(TheData)
End With
Shell_NotifyIcon NIM_ADD, TheData '根据前面定义NIM_ADD,设置为“添加模式”
End Sub' 删除系统托盘中的图标
Public Sub RemoveFromTray()
With TheData
.uFlags = 0
End With
Shell_NotifyIcon NIM_DELETE, TheData
SetWindowLong TheForm.hwnd, GWL_WNDPROC, _
OldWindowProc
End SubPublic Sub SetTrayTip(tip As String)
With TheData '删除托盘中的图标
.szTip = tip & vbNullChar
.uFlags = NIF_TIP
End With
Shell_NotifyIcon NIM_MODIFY, TheData '根据前面定义NIM_DELETE,设置为“删除模式”
End SubPublic Sub SetTrayIcon(pic As Picture) ' 设置托盘的图标
'判断一下pic中存放的是不是图标
If pic.Type <> vbPicTypeIcon Then Exit Sub
With TheData '更换图标为pic中存放的图标
.hIcon = pic.Handle
.uFlags = NIF_ICON
End With
Shell_NotifyIcon NIM_MODIFY, TheData
End Sub