Google
      
发新话题
打印

EXPLORER进程崩溃之后如何重建托盘图标

EXPLORER进程崩溃之后如何重建托盘图标

我想这是最好的方法,让程序一秒钟检查一次。效果是很好的。
那么请看下一段程序,我觉得不好
复制内容到剪贴板
代码:
Option Explicit
'RegisterWindowMessage获取分配给一个字串标识符的消息编号
'返回值Long,&C000 到 &FFFF之间的一个消息编号。零意味着出错

'参数 类型及说明
'lpString String,注册消息的名字
'注解如果没有一个子类处理程序的帮助,这个函数就没有什么用

Private Declare Function RegisterWindowMessage Lib "user32" Alias "RegisterWindowMessageA" _
        (ByVal lpString As String) As Long


Private Sub Form_Load()

    nfIconData.hwnd = Me.hwnd
    nfIconData.uID = Me.Icon
    nfIconData.uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP
    nfIconData.uCallbackMessage = WM_TRAYICON
    nfIconData.hIcon = Me.Icon.Handle
    nfIconData.szTip = App.Title + "(版本 " & App.Major & "." & App.Minor & "." & App.Revision & ")" & vbNullChar
    nfIconData.cbSize = Len(nfIconData)
    Shell_NotifyIcon NIM_ADD, nfIconData
    MsgTaskbarRestart = RegisterWindowMessage("TaskbarCreated")  '得到explorer windows消息
    pWndProc = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf WndProc)
   
End Sub

'在标准模块中建立
Public MsgTaskbarRestart As Long

Function WndProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

    If uMsg <> MsgTaskbarRestart Then    '当explorer重启后的消息比较
        If Msg = WM_TRAYICON Then
            Select Case lParam
            Case WM_LBUTTONDOWN
                FrmAbout.Show 0
            Case WM_RBUTTONDOWN
                SetForegroundWindow hwnd '关键的一步,使菜单重画
            Case WM_RBUTTONUP
                Form1.PopupMenu Form1.Index
            End Select
        End If
        WndProc = CallWindowProc(OldWndProc, hwnd, uMsg, wParam, lParam)
    Else
        Shell_NotifyIcon NIM_ADD, nfIconData     '关键的一步,使托盘图标重画
        WndProc = -1   
    End If
End Function

TOP

看看你的代码

提示: 该帖被管理员或版主屏蔽

TOP

发新话题