gpt4 book ai didi

vba - 检测 Outlook/回收状态并运行多个 Outlook 实例

转载 作者:行者123 更新时间:2023-12-04 01:56:36 25 4
gpt4 key购买 nike

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

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

默认情况下,当启动 Outlook 2013 或 2010 时,它们会自动以确保只有一个 Outlook 实例运行的状态启动。即使您使用如下 VBA 代码也是如此:
设置 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`

最佳答案

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

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

关于vba - 检测 Outlook/回收状态并运行多个 Outlook 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35381905/

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