有没有办法使用代码来检测 Outlook 是否会自动获取现有 Outlook 实例而不是启动新的 Outlook 实例? (最好是 VBA 代码。)理想情况下,还可以通过编程方式打开/关闭此行为。
这里的目标是针对一组 Outlook 帐户中的数据同时运行多个进程,因为某些 Outlook 进程可能需要很长时间。然后,持续时间较长的进程可以继续使用一个实例,而其他持续时间较短的进程则在另一个实例中启动和完成。当然,需要注意确保进程使用正确的 Outlook 实例,并且一个实例所做的更改不会影响另一个实例的行为。
默认情况下,启动 Outlook 2013 或 2010 时,它们会自动以确保仅运行一个 Outlook 实例的状态启动。即使您使用如下所示的 VBA 代码也是如此:
Set appOl = CreateObject(Class:="Outlook.Application")
根据类似的帖子http://amal.net/?p=2190 http://amal.net/?p=2190(2009)和http://www.nextofwindows.com/opening-multiple-instances-of-outlook-on-windows http://www.nextofwindows.com/opening-multiple-instances-of-outlook-on-windows(不确定日期)此行为是通过在安装 Outlook 时创建的默认 Outlook 启动快捷方式中使用 /recycle 开关来指定的。删除开关应该可以防止该行为并允许创建 Outlook 的多个实例。但是,Outlook 2010(在 Vista64 主机上)和 Outlook 2013(在 Windows 10 主机上)的安装都表现得好像存在 /recycle 开关,即使它们的 Outlook 启动快捷方式do not 包含任何 /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`
Outlook 是一个单例。每个登录用户始终只运行一个实例。另请记住,对 Outlook 对象模型的所有调用都会编组到主 Outlook 线程,因此多线程实际上是不可能的。
要运行多个线程/进程,您需要使用扩展 MAPI(C++ 或 Delphi),它是一组单独加载到每个进程中的 dll。您还可以使用CDO 1.21 https://support.microsoft.com/en-us/kb/171440(Microsoft 不再支持)或赎回 http://www.dimastr.com/redemption/(我是它的作者 - 使用它的RDO http://www.dimastr.com/redemption/rdo_introduction.htm对象族) - 它们都是扩展 MAPi 之上的包装器,并且可以在多个线程/进程中使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)