【问题标题】:Detect Outlook /recycle state and run multiple instances of Outlook检测 Outlook /recycle 状态并运行多个 Outlook 实例
【发布时间】:2016-02-13 15:50:51
【问题描述】:

有没有办法使用代码来检测 Outlook 是否会自动抓取现有的 Outlook 实例而不是启动新的 Outlook 实例? (最好是 VBA 代码。)理想情况下,还有一种以编程方式打开/关闭此行为的方法。

此处的目标是针对一组 Outlook 帐户中的数据同时运行多个进程,因为某些 Outlook 进程可能需要很长时间。然后,长时间进程可以继续使用一个实例,而其他短期进程则在另一个实例中开始和完成。当然,需要注意确保进程使用正确的 Outlook 实例,并且一个实例所做的更改不会影响另一个实例的行为。

默认情况下,在启动 Outlook 2013 或 2010 时,它们会自动以确保只有一个 Outlook 实例运行的状态启动。即使您使用这样的 VBA 代码也是如此:
Set appOl = CreateObject(Class:="Outlook.Application")

根据http://amal.net/?p=2190 (2009) 和http://www.nextofwindows.com/opening-multiple-instances-of-outlook-on-windows(不确定日期)之类的帖子,此行为是通过在安装 Outlook 时创建的默认 Outlook 启动快捷方式中使用 /recycle 开关来指定的。删除该开关应防止该行为并允许创建多个 Outlook 实例。然而,安装 Outlook 2010(在 Vista64 主机上)和 Outlook 2013(在 Windows 10 主机上)的行为都好像存在 /recycle 开关,即使它们的 Outlook 启动快捷方式 包括任何 /recycle 参数。

如果有一种方法可以检测并希望改变 Outlook 的行为方式,这样的代码可用于在启动长时间运行的进程时创建一个额外的 Outlook 实例,并在它完成时退出新的 Outlook 实例:

'       Detect whether a New Outlook instance can be created &
'         set the value of NewOutlookInstanceIsPossible to True/False
    If NewOutlookInstanceIsPossible Then
        Set appOl  = VBA.CreateObject(Class:="Outlook.application") 'New instance
    End If
'   ....     Code that does something using AppOl
    If NewOutlookInstanceIsPossible Then appOl.Quit                 'Quit new instance`

【问题讨论】:

    标签: vba outlook


    【解决方案1】:

    Outlook 是一个单例。每个登录用户始终只运行一个实例。另请记住,对 Outlook 对象模型的所有调用都被编组到主 Outlook 线程,因此实际上不可能实现多线程。

    要运行多个线程/进程,您需要使用扩展 MAPI(C++ 或 Delphi),它是一组分别加载到每个进程中的 dll。您还可以使用CDO 1.21(Microsoft 不再支持)或Redemption(使用它的RDO 系列对象)——它们都是扩展MAPi 之上的包装器,可以从多个线程/进程中使用。

    【讨论】:

    • 谢谢,迪米特里。我会看看我以前没有遇到过的 CDO。我查看了 Redemption,它看起来是一个相当大的套件,可以满足我的需求。
    • Microsoft state 最新的 CDO 1.2.1 只有在当前安装了 Outlook 2007 的情况下才能安装 并且,而如果它可以与更高版本的 Outlook 一起使用然后升级,这种用法已被弃用,因为大多数功能现在在较新的 Outlook 版本中可用。正如您所说,Dimitry,似乎获得该功能的唯一方法是直接或间接使用扩展 MAPI。可能,我需要找到另一种方式来实现我的目标。感谢 Dimitry Streblechencko。
    【解决方案2】:

    这里的简短回答是:如果可能,请不要在 Outlook 上运行多个线程。如果您绝对必须这样做,请使用扩展 MAPI。这可能需要购买 Redemption 之类的东西或替代品(如果有的话)。

    【讨论】:

      猜你喜欢
      • 2012-01-26
      • 2015-01-08
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-09
      相关资源
      最近更新 更多