gpt4 book ai didi

c# - 以编程方式关闭进程后立即结束 Outlook 进程?

转载 作者:太空宇宙 更新时间:2023-11-03 15:58:27 24 4
gpt4 key购买 nike

问题根源:当 Outlook 应用程序运行时,无法让 SelectNamesDialog 在 GUI 上显示。

我是如何尝试解决的:

我尝试通过打开和关闭 Mailitem 触发 Outlook 事件,然后显示 SelectNamesDialog。现在它出现在我们的 GUI 上。

当前面临的问题:

只有当 Outlook 应用程序正在运行时,才应在 SelectNamesDialog 显示之前打开和关闭 Mailitem。如果没有运行,则直接显示SelectNamesDialog。

if (msOutlook == true)
{
Microsoft.Office.Interop.Outlook.MailItem oMailItem = (Microsoft.Office.Interop.Outlook.MailItem)app.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);
oMailItem.Display(false);
oMailItem.Close(Microsoft.Office.Interop.Outlook.OlInspectorClose.olDiscard);
}

bool isDisplayed = SelectNamesDialog .Display();
Microsoft.Office.Interop.Outlook.Recipients recipients = SelectNamesDialog .Recipients;

if (recipients.Count > 0)
{----

}

因此,为了查明 Outlook 应用程序是否正在运行,我使用 Process.GetProcesses()。进程运行时 msOutlook 为真。

如果 Outlook 未运行并且第一次单击显示按钮,则 msOutlook 为 false 并且 snd.Display() 将被执行并且工作正常。但是 Outlook 进程不会在 SelectNamesDialog 关闭后立即结束。 Outlook 进程将在一段时间后结束。因此,如果用户立即第二次单击显示按钮,即使 outlook 应用程序未在他的系统中打开,进程也会“运行”并且 msOutlook 将为真。

现在下面的行执行将抛出 COMException

Microsoft.Office.Interop.Outlook.Recipients recipients = SelectNamesDialog .Recipients;

if (recipients.Count > 0)
{----
-----
}

文本:

System.Runtime.Interopservices.COMException
{"The object invoked has disconnected from its clients. (Exception from HRESULT: 0x80010108 (RPC_E_DISCONNECTED))"}

最佳答案

“当 Outlook 应用程序运行时无法让 SelectNamesDialog 在 GUI 上显示”到底是什么意思。您是指在您的应用程序后面显示的对话框 ID 吗?

您可以尝试将 Outlook 置于前台 (Application.ActiveWindow.Activate),但随后您需要将您的应用恢复。

或者您可以使用 Redemption(我是它的作者)及其 RDOSelectNamesDialog - 由于 Redemption 是在进程内运行的,根本不使用 Outlook,因此该对话框将对您的应用程序具有模态。您还可以显式设置 RDOSession.ParentWindow 属性以确保特定窗口是地址簿对话框的父窗口。

关于c# - 以编程方式关闭进程后立即结束 Outlook 进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22472255/

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