Option Explicit Public Const WUM_RESETNOTIFICATION As Long = &H407 'Required Public constants, types & declares 'for the Shell_Notify API method Public Const NIM_ADD As Long = &H0 Public Const NIM_MODIFY As Long = &H1 Public Const NIM_DELETE As Long = &H2 Public Const NIF_ICON As Long = &H2 'adding an ICON Public Const NIF_TIP As Long = &H4 'adding a TIP Public Const NIF_MESSAGE As Long = &H1 'want return messages ' Structure needed for Shell_Notify API 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 Function SendMessage Lib "user32" Alias "SendMessageA" _ (ByVal hwnd As Long, ByVal wMsg As Long, _ ByVal wParam As Integer, ByVal lParam As Any) As Long Declare Function GetClassName Lib "user32" _ Alias "GetClassNameA" _ (ByVal hwnd As Long, _ ByVal lpClassName As String, _ ByVal nMaxCount As Long) As Long Declare Function GetWindowTextLength Lib "user32" _ Alias "GetWindowTextLengthA" _ (ByVal hwnd As Long) As Long Declare Function GetWindowText Lib "user32" _ Alias "GetWindowTextA" _ (ByVal hwnd As Long, _ ByVal lpString As String, _ ByVal cch As Long) As Long Declare Function EnumWindows Lib "user32" _ (ByVal lpEnumFunc As Long, _ ByVal lParam As Long) As Long Declare Function Shell_NotifyIcon Lib "shell32.dll" _ Alias "Shell_NotifyIconA" _ (ByVal dwMessage As Long, _ lpData As NOTIFYICONDATA) As Long Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long ' This is the entry point that makes it happen Sub RemoveNewMailIcon() EnumWindows AddressOf EnumWindowProc, 0 End Sub Public Function EnumWindowProc(ByVal hwnd As Long, _ ByVal lParam As Long) As Long 'Do stuff here with hwnd Dim sClass As String Dim sIDType As String Dim sTitle As String Dim hResult As Long sTitle = GetWindowIdentification(hwnd, sIDType, sClass) If sTitle = "rctrl_renwnd32" Then hResult = KillNewMailIcon(hwnd) End If If hResult Then EnumWindowProc = False ' Reset the new mail notification engine Call SendMessage(hwnd, WUM_RESETNOTIFICATION, 0&, 0&) Else EnumWindowProc = True End If End Function Private Function GetWindowIdentification(ByVal hwnd As Long, _ sIDType As String, _ sClass As String) As String Dim nSize As Long Dim sTitle As String 'get the size of the string required 'to hold the window title nSize = GetWindowTextLength(hwnd) 'if the return is 0, there is no title If nSize > 0 Then sTitle = Space$(nSize + 1) Call GetWindowText(hwnd, sTitle, nSize + 1) sIDType = "title" sClass = Space$(64) Call GetClassName(hwnd, sClass, 64) Else 'no title, so get the class name instead sTitle = Space$(64) Call GetClassName(hwnd, sTitle, 64) sClass = sTitle sIDType = "class" End If GetWindowIdentification = TrimNull(sTitle) End Function Private Function TrimNull(startstr As String) As String Dim pos As Integer pos = InStr(startstr, Chr$(0)) If pos Then TrimNull = Left(startstr, pos - 1) Exit Function End If 'if this far, there was 'no Chr$(0), so return the string TrimNull = startstr End Function Private Function KillNewMailIcon(ByVal hwnd As Long) As Boolean Dim pShell_Notify As NOTIFYICONDATA Dim hResult As Long 'setup the Shell_Notify structure pShell_Notify.cbSize = Len(pShell_Notify) pShell_Notify.hwnd = hwnd pShell_Notify.uID = 0 ' Remove it from the system tray and catch result hResult = Shell_NotifyIcon(NIM_DELETE, pShell_Notify) If (hResult) Then KillNewMailIcon = True Else KillNewMailIcon = False End If End Function