如何使用 VBA 在 Outlook 中检索在线状态

How to retrieve online presence status in Outlook using VBA

问题

我需要使用 VBA 从 Microsoft Outlook 获取在线状态。 状态显示为联系人姓名附近显示的绿-黄-红-灰灯,通常由某些即时消息 (IM) 应用程序(例如 Teams、Skype、Zoom、Jabber 等)提供。

这是通常的样子:

可用数据

不幸的是,状态在 Outlook 结构中不可用 AddressEntry or ExchangeUser,这很容易获得。

注意:请不要将在线状态与日历可用性混淆,后者可以使用函数 GetFreeBusy.

轻松检索

另一种观点

我在这里找到的与主题相关的唯一相关且相当不错的描述:https://docs.microsoft.com/en-us/office/client-developer/shared/integrating-im-applications-with-office .

但这里的主题是从不同的角度提出的——从IM应用程序端应该做什么来提供这种状态。简而言之:IM 应用程序应该在 ...\Software\IM Providers\... 下的注册表中添加一些数据并实现接口 IUCOfficeIntegration,以便 Outlook 可以使用它来检索状态。

所以中间的想法是直接从 IM 应用程序通过此接口检索状态。但是关于从VBA.

调用COM接口的资料很少

是否有人可以提供任何提示如何检索状态?

您可以为此使用 Graph。不过,我认为您无法使用 VBA。

https://docs.microsoft.com/en-us/graph/api/presence-get?view=graph-rest-1.0&tabs=http

Outlook 对象模型没有为此提供任何 属性 或方法。图 API 为此提供了 Get presence 方法。