Article ID: 162613
Article Last Modified on 7/15/2004
dwMessage: A message to execute an action. This parameter can be one of
the following values:
NIM_ADD: Adds an icon to the status area.
NIM_DELETE: Deletes an icon from the status area.
NIM_MODIFY: Modifies an icon in the status area.
The values of these messages can be found in the header file,
Shellapi.h.
pnid: A pointer to a NOTIFYICONDATA structure. To pass this argument to
the function, create a user-defined data type called NOTIFYICONDATA
(shown later in this section) and pass this data type by value.
cbSize: Passes the size of the NOTIFYICONDATA data type.
Data Type: Long.
Value: Use the Len function with the variable declared as this data
type as the argument.
hWnd: Handle of the window used to receive the notification message.
Data Type: Long.
Value: The hWnd property of the control used to receive this message.
uId: Identifier of the icon in the status area.
Data Type: Long.
Value: Any value within the limits of the Long data type. The sample
program uses vbNull.
uFlags: Array of flags that indicate which of the other members contain
valid data.
Data Type: Long.
Value: Any combination of the following constants to indicate that
the member of this structure is valid and will be used:
NIF_ICON: Passing this flag indicates that the value for the
hIcon will be the icon that appears in the taskbar status area.
NIF_MESSAGE: Passing this flag indicates that the uCallBackMessage
value will be used as the callback message.
NIF_TIP: Passing this flag indicates that the value of szTip will
be used as the ToolTip for the icon in the taskbar status area.
uCallBackMessage: Identifier of the notification message sent to the
window that is used to receive the messages.
Data Type: Long.
Value: The message used to identify that a mouse event has occurred
within the rectangular boundaries of the icon in the taskbar status
area.
hIcon: Handle of the icon that is displayed in the taskbar status area.
Data Type: Long.
Value: The image that will be used as an icon in the taskbar status
area. This can be the icon property of a control, an image from an
image control, or any icon image.
szTip: String to be used as the ToolTip text.
Data Type: Fixed-length string 64 bytes long.
Value: Any null-terminated string under 64 bytes.
cbSize: The length of the variable that uses the Len function. hWnd: The handle of the window used to receive the callback messages. In the sample program, the form is used as the window to receive the messages. uId: The icon identifier. Although you can use any number, the sample program uses the vbNull constants. uFlags: Array flags indicate what members of this structure are valid. The sample program uses all the flags for maximum versatility. uCallBackMessage: The message that is sent when mouse activity occurs on the icon in the taskbar status tray. The mouse message that is sent maps to a mouse event in the control specified in the hWnd value. You should use a mouse message that can handle the messages exclusively. For example, the sample program uses the WM_MOUSEMOVE message because this message maps to the MouseMove event of the form. Rarely used in its intended form, the MouseMove event is a suitable event for this purpose. hIcon: The icon that is to be displayed in the taskbar status area. The sample program uses the form icon. szTip: The ToolTip string. The string must be terminated with a null character so the vbNullChar constant is concatenated to the string.
'Declare a user-defined variable to pass to the Shell_NotifyIcon
'function.
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
'Declare the constants for the API function. These constants can be
'found in the header file Shellapi.h.
'The following constants are the messages sent to the
'Shell_NotifyIcon function to add, modify, or delete an icon from the
'taskbar status area.
Private Const NIM_ADD = &H0
Private Const NIM_MODIFY = &H1
Private Const NIM_DELETE = &H2
'The following constant is the message sent when a mouse event occurs
'within the rectangular boundaries of the icon in the taskbar status
'area.
Private Const WM_MOUSEMOVE = &H200
'The following constants are the flags that indicate the valid
'members of the NOTIFYICONDATA data type.
Private Const NIF_MESSAGE = &H1
Private Const NIF_ICON = &H2
Private Const NIF_TIP = &H4
'The following constants are used to determine the mouse input on the
'the icon in the taskbar status area.
'Left-click constants.
Private Const WM_LBUTTONDBLCLK = &H203 'Double-click
Private Const WM_LBUTTONDOWN = &H201 'Button down
Private Const WM_LBUTTONUP = &H202 'Button up
'Right-click constants.
Private Const WM_RBUTTONDBLCLK = &H206 'Double-click
Private Const WM_RBUTTONDOWN = &H204 'Button down
Private Const WM_RBUTTONUP = &H205 'Button up
'Declare the API function call.
Private Declare Function Shell_NotifyIcon Lib "shell32" _
Alias "Shell_NotifyIconA" _
(ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean
'Dimension a variable as the user-defined data type.
Dim nid As NOTIFYICONDATA
Private Sub Command1_Click()
'Click this button to add an icon to the taskbar status area.
'Set the individual values of the NOTIFYICONDATA data type.
nid.cbSize = Len(nid)
nid.hWnd = Form1.hWnd
nid.uId = vbNull
nid.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
nid.uCallBackMessage = WM_MOUSEMOVE
nid.hIcon = Form1.Icon
nid.szTip = "Taskbar Status Area Sample Program" & vbNullChar
'Call the Shell_NotifyIcon function to add the icon to the taskbar
'status area.
Shell_NotifyIcon NIM_ADD, nid
End Sub
Private Sub Command2_Click()
'Click this button to delete the added icon from the taskbar
'status area by calling the Shell_NotifyIcon function.
Shell_NotifyIcon NIM_DELETE, nid
End Sub
Private Sub Form_Load()
'Set the captions of the command button when the form loads.
Command1.Caption = "Add an Icon"
Command2.Caption = "Delete Icon"
End Sub
Private Sub Form_Terminate()
'Delete the added icon from the taskbar status area when the
'program ends.
Shell_NotifyIcon NIM_DELETE, nid
End Sub
Private Sub Form_MouseMove _
(Button As Integer, _
Shift As Integer, _
X As Single, _
Y As Single)
'Event occurs when the mouse pointer is within the rectangular
'boundaries of the icon in the taskbar status area.
Dim msg As Long
Dim sFilter As String
msg = X / Screen.TwipsPerPixelX
Select Case msg
Case WM_LBUTTONDOWN
Case WM_LBUTTONUP
Case WM_LBUTTONDBLCLK
CommonDialog1.DialogTitle = "Select an Icon"
sFilter = "Icon Files (*.ico)|*.ico"
sFilter = sFilter & "|All Files (*.*)|*.*"
CommonDialog1.Filter = sFilter
CommonDialog1.ShowOpen
If CommonDialog1.filename <> "" Then
Form1.Icon = LoadPicture(CommonDialog1.filename)
nid.hIcon = Form1.Icon
Shell_NotifyIcon NIM_MODIFY, nid
End If
Case WM_RBUTTONDOWN
Dim ToolTipString As String
ToolTipString = InputBox("Enter the new ToolTip:", _
"Change ToolTip")
If ToolTipString <> "" Then
nid.szTip = ToolTipString & vbNullChar
Shell_NotifyIcon NIM_MODIFY, nid
End If
Case WM_RBUTTONUP
Case WM_RBUTTONDBLCLK
End Select
End Sub
Keywords: kbhowto KB162613