Private Declare Function SHAppBarMessage Lib "shell32.dll" (ByVal dwMessage As Long, pData As APPBARDATA) As Long
Private Declare Function Shell_NotifyIcon Lib "shell32.dll" _
(ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
Const NIM_ADD = &H0
Const NIM_DELETE = &H2
Const NIM_MODIFY = &H1
Const NIF_ICON = &H2
Const NIF_MESSAGE = &H1
Const NIF_TIP = &H4
Const WM_USER = &H400
Const ABM_GETTASKBARPOS = &H5
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Type APPBARDATA
cbSize As Long
hwnd As Long
uCallbackMessage As Long
uEdge As Long
rc As RECT
lParam As Long ' message specific
End Type
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 Type
Dim StrBar As APPBARDATA
Dim StrNotify As NOTIFYICONDATA
Dim AddIcons As Long
Dim UseIcons As Long
Private Function AllRemove(Toticon As Long)
'/모든 아이콘 삭제
For i = 1 To Toticon
StrNotify.uID = i
Shell_NotifyIcon NIM_DELETE, StrNotify
Next i
End Function
Private Function FuncAppBar()
'/작업 표시줄 표시 여부
StrBar.cbSize = 36&
FuncAppBar = SHAppBarMessage(ABM_GETTASKBARPOS, StrBar)
End Function
Private Sub CmdAdd_Click()
'/아이콘 추가
Dim Hdlicon As Long
Dim tMsg As String
'/Image 선택
UseIcons = UseIcons + 1
If UseIcons = 4 Then
UseIcons = 1
End If
Hdlicon = Image1(UseIcons).Picture
'/추가된 아이콘 번호
AddIcons = AddIcons + 1
tMsg = "아이콘 번호는 " & CStr(AddIcons)
'/구조체 정보 Set
StrNotify.uID = AddIcons
StrNotify.HICon = Hdlicon
StrNotify.szTip = tMsg
StrNotify.uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP
'/ 아이콘 추가
Shell_NotifyIcon NIM_ADD, StrNotify
End Sub
Private Sub CmdModify_Click()
'/아이콘 모양 변경
Dim Hdlicon As Long
Dim hID As Long
hID = Val(InputBox("변경할 아이콘 번호:", ""))
If hID = 0 Then Exit Sub
'/Image 선택
UseIcons = UseIcons + 1
If UseIcons = 4 Then
UseIcons = 1
End If
Hdlicon = Image1(UseIcons).Picture
'/구조체 정보 Set
StrNotify.uID = hID
StrNotify.HICon = Hdlicon
StrNotify.uFlags = NIF_ICON
'/아이콘 변경
Shell_NotifyIcon NIM_MODIFY, StrNotify
End Sub
Private Sub CmdDelete_Click()
'/아이콘 삭제
Dim Hdlicon As Long
Dim hID As Long
hID = Val(InputBox("삭제할 아이콘 번호:", ""))
If hID = 0 Then Exit Sub
'/구조체 정보 Set
StrNotify.uID = hID
'/ 아이콘 삭제
Shell_NotifyIcon NIM_DELETE, StrNotify
End Sub
Private Sub CmdExit_Click()
'/종료
AllRemove (AddIcons)
End
End Sub
Private Sub Form_Load()
'/작업표시줄 존재여부
If FuncAppBar <> 1 Then
MsgBox "작업 표시줄이 없습니다."
'/현재 시스템의 모든 트레이 아이콘을 삭제
AllRemove (AddIcons)
Exit Sub
End If
'/NOTIFYICONDATA 구조체 Setting
StrNotify.cbSize = 88&
StrNotify.uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP
StrNotify.uCallbackMessage = WM_USER + &H201
StrNotify.szTip = ""
StrNotify.hwnd = Me.hwnd
UseIcons = 0
AddIcons = 0
End Sub