gpt4 book ai didi

vba - 使用 VBScript 在 Windows 任务栏中显示新邮件图标

转载 作者:行者123 更新时间:2023-12-04 13:34:05 25 4
gpt4 key购买 nike

我很难将 Outlook 配置为仅在我需要时才显示新邮件消息图标。我设置了几个不想显示的规则/过滤器,但它们总是这样做。我尝试了一切,但这不是我的问题。我发现一个好的解决方案是创建一个 vbs 脚本,该脚本调用我用来通知我的 bash 脚本。我在我的包罗万象的规则中调用此代码,并让所有其他规则提前退出。它工作得很好。不过,我真正想要的是在任务栏中显示新邮件图标(信封)。我真的对vb,vba,vbs一无所知。但是,如果有人可以在文件中发送我需要的代码,我很乐意试一试。
谢谢!

最佳答案

据我所知,没有直接的方法来显示 使用 VBA 的新邮件图标。但是,您可以添加 一个 按需提供不同的托盘图标。我确信有一种方法可以通过使用 LoadIcon 或类似的 Win32 函数来显示类似外观的图标,但我无法弄清楚如何。

请注意,这只适用于 32 位 Office(我无法让它在 64 位中工作;所以在这方面你很不走运——即使在 Microsoft forums 中,这个问题也没有解决。再说一次,我认为 Stack Overflow 比 Microsoft 论坛更高)。

  • 转到工具->宏->Visual Basic 编辑器,单击查看->项目资源管理器。
  • 在左侧的 Project 窗口中,右键单击“Project1”并选择 Insert->Module。
  • 双击刚刚创建的新模块

  • 并粘贴以下代码:
    'Some code borrowed from:
    'http://support.microsoft.com/kb/176085

    Public 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

    Public 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 IDI_APPLICATION = 32512&
    Public Const IDI_ASTERISK = 32516&
    Public Const IDI_EXCLAMATION = 32515&
    Public Const IDI_HAND = 32513&
    Public Const IDI_ERROR = IDI_HAND
    Public Const IDI_INFORMATION = IDI_ASTERISK
    Public Const IDI_QUESTION = 32514&
    Public Const IDI_WARNING = IDI_EXCLAMATION
    Public Const IDI_WINLOGO = 32517&

    Public Const WM_MOUSEMOVE = &H200
    Public Const WM_LBUTTONDOWN = &H201
    Public Const WM_LBUTTONUP = &H202
    Public Const WM_LBUTTONDBLCLK = &H203
    Public Const WM_RBUTTONDOWN = &H204
    Public Const WM_RBUTTONUP = &H205
    Public Const WM_RBUTTONDBLCLK = &H206

    Public Declare Function SetForegroundWindow Lib "user32" _
    (ByVal hwnd As Long) As Long
    Public Declare Function Shell_NotifyIcon Lib "shell32" _
    Alias "Shell_NotifyIconA" _
    (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean

    Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
    (ByVal hWndParent As Long, ByVal hwndChildAfter As Long, _
    ByVal lpszClass As String, ByVal lpszWindow As String) As Long

    Public Declare Function LoadIcon Lib "user32" Alias "LoadIconA" (ByVal hInstance As Long, ByVal lpIconName As Long) As Long

    Public nid As NOTIFYICONDATA

    Public Sub ShowNotifyIcon()
    With nid
    .cbSize = Len(nid)
    .hwnd = 0
    'If you un-comment this line below the icon won't disappear when you mouse over it. You will need to use the HideNotifyIcon() function to make it disappear
    '.hwnd = FindWindowEx(0&, 0&, "mspim_wnd32", "Microsoft Outlook")
    .uId = vbNull
    .uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
    .uCallBackMessage = WM_MOUSEMOVE

    .hIcon = LoadIcon(0&, IDI_APPLICATION)
    .szTip = "A message has arrived" & vbNullChar
    End With
    Shell_NotifyIcon NIM_ADD, nid
    End Sub

    Public Sub HideNotifyIcon()
    Shell_NotifyIcon NIM_DELETE, nid
    End Sub

    现在,为了能够在 Outlook 规则中使用这些,您需要双击 ThisOutlookSession,然后粘贴以下代码:
    Public Sub ShowNewMailIcon(Item As Outlook.MailItem)
    Call ShowNotifyIcon
    End Sub

    Public Sub HideNewMailIcon(Item As Outlook.MailItem)
    Call HideNotifyIcon
    End Sub

    现在您可以保存并关闭 Visual Basic 窗口。

    要在规则中使用这些功能,您可以创建一个新规则:工具->规则和警报->新规则,在前 2 个屏幕上选择您的条件,然后在“选择操作”屏幕上,选择“运行脚本”。当您将其添加到规则中并单击带下划线的“运行脚本”时,您应该会看到 2 个函数“ShowIconInTray”和“HideIconInTray”。

    enter image description here

    当您在规则中使用 ShowIconInTray 时,该图标应该在规则运行时出现,当您将鼠标悬停在它上面时,它应该消失(我在为图标提供其他功能时遇到了挑战,因为没有窗口句柄可以将其连接到可以接收和处理图标上的鼠标事件)。

    您可能需要检查 Outlook 的安全性(工具->宏->安全)。我认为 Outlook 2007 预配置了高安全性。要使宏始终运行,您可以选择“不对宏进行安全检查”或“宏警告”。签署 VBA 很容易,但超出了此答案的范围。

    这不是我最喜欢的代码,而且有点骇人听闻;但是 Shell_NotifyIcon 并不是真正设计用于 VBA,而且您不能在 VBScript 中使用 Win32 函数。最佳替代答案可能包括 VSTO 加载项,但您不能真正将加载项“粘贴”到答案中——而且它需要 Visual Studio。

    关于vba - 使用 VBScript 在 Windows 任务栏中显示新邮件图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9378313/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com