本程序项目包括一个模块和一个窗体1 、模块源代码为:
    
    Option Explicit 
    ' 强制定义每个使用的变量
    
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 NIF_ICON = &H2 
Public Const NIF_MESSAGE = &H1 
Public Const NIF_TIP = &H4 
Public Const NIM_ADD = &H0 
Public Const NIM_DELETE =&H2 
Public Const NIM_MODIFY =&H1Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" _
(ByVal dwMessage As Long , lpData As NOTIFYICONDATA ) As LongType POINTAPI 
      x As Long
      y As Long 
End Type 
Type Msg 
     hwnd As Long 
     message As Long 
     wParam As Long 
     lParam As Long 
     time As Long 
     pt As POINTAPI 
End Type 
Public Const WM_USER = &H400 
Public Const WM_RBUTTONDOWN =&H204 
Public Const WM_LBUTTONDBLCLK =&H203 
Public Const GWL_WNDPROC = -4 
Public trayflag As Boolean'定义托盘图标是否在桌面上
Global lpPrevWndProc As Long 
Global gHW As Long 
Declare 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
              
Function WindowProc(ByVal hw As Long, ByVal uMsg As Long , ByVal wParam As Long , ByVal _
                lParam As Long) As Long 
            If hw = Form1.hwnd And uMsg = WM_USER+100 Then
                '检测到鼠标点动托盘图标
                  Select Case lParam 
                            Case WM_RBUTTONDOWN                                   '鼠标右键按下
                                     Form1.PopupMenu Form1.mainmenu              '弹出菜单
                             Case WM_LBUTTONDBLCLK                               ' 鼠标左键双击
                                     Form1.Show                                                     '显示窗口
                            Case Else End Select Else                                          ' 调用缺省窗口指针
                                     WindowProc = CallWindowProc (lpPrevWndProc , hw ,uMsg, wParam , lParam)
               End If 
End Function Public Sub hook ()
     '将程序勾入消息环中
     ' 利用AddressOf 取得消息处理函数WindowProc的指针,并将其传给SetWindowLong
     'lpPrevWndProc用来存储原窗口的指针
        lpPrevWndProc = SetWindowLong (gHW , GWL_WNDPROC,AddressOf WindowProc)
 nd Sub 
 
Public Sub Unhook ()
     ' 将程序从消息环退出.用原窗口的指针替换WindowProc函数的指针,即关闭子类、退出消息循环
     Dim temp As Long 
     temp = SetWindowLong (gHW , GWL_WNDPROC, lpPrevWndProc )
 End Sub 
 
 2 、在窗口form1 加入一个主菜单mainmenu,设置为不可见。在加
入一些子菜单如
" 显示窗口" (名称为:show)
" 隐藏窗口" (名称为:hide)
" 退出程序" (名称为:exit)
在加入四个按钮
Command1,Command2,Command3,Command.caption 
属性分别为:“删除托盘图标" ,”创建托盘图标" ,“修改托盘图标" ,”退出程序".
代码窗口的内容为:Dim MyNot As NOTIFYICONDATA        ' 定义一个托盘结构Private Sub Command1_Click()                 '按下删除托盘图标按钮
         With MyNot
              .hIcon = Form1.Icon      '托盘图标指针指向窗口的图标.
              .hwnd = Form1.hwnd    ' 窗体指针
              .szTip = ""'弹出提示字符串,删除时应为空
              .uCallbackMessage = WM_USER + 100'对应程序定义的消息
              .uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE' 图标标志
              .uID = 1' 图标识别符。cbSize = Len(MyNot )'计算结构实例MyNot 的长度
           End With
            hh = Shell_NotifyIcon(NIM_DELETE, MyNot) ' 删除该托盘图标
            trayflag = False'托盘图标删除后trayflag为假
End SubPrivate Sub Command2_Click()'按下创建托盘图标按钮
    Dim hh As Long 
    With MyNot 
             .hIcon = Form1.Icon
             .hwnd = Form1.hwnd 
             .szTip = " 托盘图标" & Chr(&H0)
             .uCallbackMessage = WM_USER+ 100
             .uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE 
             .uID = 1 
             .cbSize = Len(MyNot )
    End With
    hh = Shell_NotifyIcon(NIM_ADD , MyNot)'添加一个托盘图标
    trayflag = True' 托盘图标添加后trayflag为真
End Sub Private Sub Command3_Click()'按下修改托盘图标按钮
     Dim hh As Long Set P = LoadPicture("cd.ico") ' 导入一个新图标
     With MyNot
              .hIcon = P' 将托盘图标改为新图标
              .hwnd = Form1.hwnd
              .szTip = " 光盘图标" & Chr(&H0)'更改提示信息
              .uCallbackMessage = WM_USER + 100
              .uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE 
              .uID = 1 
              .cbSize = Len (MyNot )
    End With 
    hh = Shell_NotifyIcon(NIM_MODIFY, MyNot)'修改托盘图标的某些特征
End Sub Private Sub Command4_Click()'退出窗口按钮被按下
 If trayflag = True Then Command1_Click' 如果托盘图标仍在,模拟按下" 删除托盘图标" 按钮
        Unhook'退出消息循环
        Unload Me' 卸载窗体
End Sub Private Sub exit_Click()
    If trayflag = True Then Command1_Click'如果托盘图标仍在,模拟按下“删除托盘图标" 按钮Unhook'退出消息循环
    Unload Me' 卸载窗体
    End Sub  
    
Private Sub Form_Load ()
    gHW = Me.hwnd' 取得本窗体指针
    hook'调用钩子函数,将自制消息处理函数钩入 Windows 的消息循环
End Sub Private Sub hide_Click()
    Form1.hide'隐藏窗口
End Sub Private Sub show_Click()
    Form1.show'显示窗口
End Sub