vb怎么获取托盘菜单句柄

vb怎么获取托盘菜单句柄,第1张

VB

菜单编辑器在主菜单下,建立子菜单只要按向右的箭头就可以了,如下:01......0101......0101.............010101.............01010202......0201

NoticeIcon.bas文件:

Public Const DefaultIconIndex = 1 '图标缺省索引

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

窗体代码:

' @(e)

' 机能 : 窗口大小改变时

' 机能说明 : 窗口大小改变。

' 备注 :

Private Sub Form_Resize()

'判断窗口是否最小化状态,并且是按最小化按纽后第一次发生Resize事件

If IsIconic(Me.hWnd) <>0 And MinFlag = False Then

MinFlag = True

Me.Visible = False '隐藏窗口

'将窗口图标加入通知栏

Call Icon_Add(Me.hWnd, Me.Caption, Me.Icon, 0)

End If

End Sub

' @(e)

' 机能 : 点击托盘图标

' 机能说明 : 点击托盘图标。

' 备注 :

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)

Dim l

l = x \ 15

'点击通知栏图标,用鼠标右键时调出d出菜单

If l = WM_RBUTTONDOWN Then

Me.PopupMenu m_Main

'点击通知栏图标,用鼠标左键时,将通知栏图标改为另外的图标

ElseIf l = WM_LBUTTONDOWN Then

Call Icon_Del(Menufrm.hWnd, 0) '删除通知栏图标

Menufrm.Show '调出窗口

Menufrm.WindowState = 0

Menufrm.SetFocus

MinFlag = False

End If

End Sub

Private Sub m_Menu_Click(Index As Integer)

Select Case Index

Case 0: '当单击"还原"菜单时

Call Icon_Del(Menufrm.hWnd, 0) '删除通知栏图标

Menufrm.Show '调出窗口

Menufrm.WindowState = 0

Menufrm.SetFocus

MinFlag = False

Case 1: '当单击"计时器"菜单时

frmTimer.Show

Case 2: '当单击"退出"菜单时

Dim ret As Integer

ret = ShowMsg("您确定要退出系统吗?", MSG_ASK)

If ret = vbYes Then

Call Icon_Del(Menufrm.hWnd, 0) '删除通知栏图标

Unload Me

End '退出程序

End If

End Select

End Sub

如果用vb.net程序打开可以用如下代码:

Shell("C:\文件", AppWinStyle.Hide)'打开C:\文件,并在其打开时将其隐藏

如不懂可以追问

望采纳


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8112462.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-13
下一篇2023-04-13

发表评论

登录后才能评论

评论列表(0条)

    保存