Office 2007:以编程方式控制外出助理?

Atm*_*ons 6 c# office-2007 visual-studio-2008 outlook-addin

有人知道如何在Outlook 2007中以编程方式启用/禁用外出自动响应程序的实际状态吗?

已经在VS 2008中搜索了对象浏览器并找到了枚举Microsoft.Office.Interop.Outlook.OlBusyStatus但我没有找到任何类或其他任何使用它的内容.

任何想法都表示赞赏,感谢和问候

Jus*_*ant 3

更新:使用改编自这篇博文的示例代码更新了下面的代码,该代码在更广泛的 Outlook 安装中(例如同时使用 Exchange 和 PST 或访问多个 Exchange 邮箱的 Outlook 安装)会更好地工作。

以下代码适用于 Outlook 2007,用于从外部(到 Outlook)EXE 设置 OOF 状态:

Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.ApplicationClass();
Microsoft.Office.Interop.Outlook.NameSpace ns = app.Session;
foreach (Microsoft.Office.Interop.Outlook.Store store in ns.Stores)
{
    if (store.ExchangeStoreType == Microsoft.Office.Interop.Outlook.OlExchangeStoreType.olPrimaryExchangeMailbox)
    {
        store.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x661D000B", true); // false to turn off OOF
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

确保您没有以管理员身份运行该代码,也没有以非管理员身份运行 Outlook,否则您可能会在 Vista 上收到与安全相关的错误。

请注意,它将在 Outlook 中弹出安全对话框,以确保用户同意您访问 Outlook 对象模型。当从外部 EXE 访问 Outlook 对象模型时,这是正常的。

但是,如果您从加载项访问对象模型,则上面的代码并不完全正确:您需要获取对受信任 Outlook 的引用,而不是通过构造函数创建新的 Outlook.Application 对象加载项内部的 .Application 对象,如下所示:

Microsoft.Office.Interop.Outlook.NameSpace ns = this.Application.Session;
foreach (Microsoft.Office.Interop.Outlook.Store store in ns.Stores)
{
    if (store.ExchangeStoreType == Microsoft.Office.Interop.Outlook.OlExchangeStoreType.olPrimaryExchangeMailbox)
    {
        store.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x661D000B", true); // false to turn off OOF
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句, MSDN有一篇关于加载项安全性的好文章,如果您遇到安全对话框或错误,该文章可能会很有用。