gpt4 book ai didi

c# - 在非 Outlook 窗口位于前台之前,在 Outlook 运行时无法获取 Outlook.Application

转载 作者:太空狗 更新时间:2023-10-30 01:29:04 28 4
gpt4 key购买 nike

Marshal.GetActiveObject("Outlook.Application") 在 Outlook 启动并继续运行时抛出 操作不可用(HRESULT 异常:0x800401E3 (MK_E_UNAVAILABLE))直到非 Outlook 窗口成为事件的前景窗口。

我在 Windows 10 版本 1803 版本 17134.523(这是我的本地计算机)上运行 Outlook 版本 1901 版本 11231.20130。我观察到客户端机器不以这种方式运行。这是在使用 .NET 4.5.2 和通过 NuGet 获得的 Microsoft.Office.Interop.Outlook 版本 15.0.4797.1003 的 WPF 应用程序中发生的。

我反复运行了下面的代码。如上所述,一旦最小化 Outlook 实例或将非 Outlook 窗口设置为前台,它将成功,但在此之前它可能会不断失败(下面的输出)。我尝试暂停约 20-30 秒,让 Outlook 有时间加载,但仍然得到相同的结果。

    // Detect that the active window is an Outlook window
Outlook.Application app = null;
// Optional: Wait for Outlook to load 20-30 sec using Thread.Sleep
try
{
Debug.WriteLine("app");
app = (Outlook.Application)Marshal.GetActiveObject("Outlook.Application");
Debug.WriteLine("got app");
}
catch (Exception exception)
{
Debug.WriteLine(exception.Message);
}
// Do things with app

当 Outlook 正在运行时,我希望看到:

app
got app

如果自 Outlook 启动以来将非 Outlook 窗口设置为前台(即不是资源管理器或检查器窗口),则会发生这种情况。如果 Outlook 正在运行并且一直在前台,我会看到:

app
Operation unavailable (Exception from HRESULT: 0x800401E3 (MK_E_UNAVAILABLE))

在黑暗中,当我注意到发生这种情况时,我尝试通过执行以下操作来“启动”Interop:

bootApplication = new Microsoft.Office.Interop.Outlook.Application();

没有效果。任何输入都会被重视。谢谢!

最佳答案

不要在 Outlook 中使用 GetActiveObject - 它是单例,因此创建 Outlook.Application 对象的新实例将返回指向现有实例的指针,如果它已经在运行。

关于c# - 在非 Outlook 窗口位于前台之前,在 Outlook 运行时无法获取 Outlook.Application,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54583617/

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