各位大侠请指教:
    我用TerminateProcess函数结束了一个应用进程,可是该进程在任务栏托盘里的图标却不会马上消失,非得要等到下次鼠标经过任务栏托盘时该图标才会消失。曾试验发送wm_paint消息给任务栏窗体以及用UPDATEWINDOW函数更新任务栏窗体都不行。请各位大侠帮帮忙想想办法,不胜感激!!

解决方案 »

  1.   

    别人写的代码'以下中模块代码
    Public Type NOTIFYICONDATA '托盘结构
        cbSize As Long
        hwnd As Long
        uID As Long
        uFlags As Long
        uCallbackMessage As Long
        hIcon As Long
        szTip As String * 128
        dwState As Long
        dwStateMask As Long
        szInfo As String * 256
        uTimeoutAndVersion As Long
        szInfoTitle As String * 64
        dwInfoFlags As Long
    End TypeConst niif_info = &H1Public Const NIM_ADD = &H0
    Public Const NIM_MODIFY = &H1
    Public Const NIM_DELETE = &H2
    Public Const NIF_MESSAGE = &H1
    Public Const NIF_ICON = &H2
    Public Const NIF_TIP = &H4
    Public Const NIF_INFO = &H10
    Public Const WM_LBUTTONDBLCLK = &H203
    Public Const WM_LBUTTONDOWN = &H201
    Public Const WM_RBUTTONUP = &H205
    Public Const WM_MOUSEMOVE As Long = &H200Public Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean '托盘函数
    Public Declare Function SetForegroundWindow Lib "user32" Alias "SetForegroundWindow" (ByVal hwnd As Long) As LongPublic TrayI As NOTIFYICONDATA
    Public Title_tray As String
    '以下是窗体代码
    Option ExplicitPrivate Sub Form_Load()
    On Error Resume Next
        Title_tray = "你好,这是一个托盘程序演示"
        With TrayI
           .cbSize = Len(TrayI)
           .hwnd = Form1.hwnd
           .uID = vbNull
           .uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
           .uCallbackMessage = WM_MOUSEMOVE
           .hIcon = Form1.Icon
           .szTip = Title_tray & vbNullChar
        End With
        Call Shell_NotifyIcon(NIM_ADD, TrayI)
    End SubPrivate Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
         If Button = 1 Then
           Me.WindowState = vbNormal
           Me.Visible = True
           SetForegroundWindow Me.hwnd
           Form1.PopupMenu Form1.bb '弹出菜单
         End If
         If Button = 2 Then
         '右键
            
         End If
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        Call Shell_NotifyIcon(NIM_DELETE, TrayI)
    End Sub
      

  2.   

    用TerminateProcess强制结束进程不会释放资源的
    慎用
      

  3.   

    同意楼上,建议给窗口发送WM_CLOSE消息或者使用ExitProcess结束进程
      

  4.   

    SendMessage hWnd, WM_CLOSE, 0, 0