JclMapi - 电子邮件 window 位于主窗体下方

JclMapi - e-mail message window goes underneath the main form

我在使用 JclMAPI 时遇到了一些问题。目前我正在使用 JCL 2.6 Build 5178 和 Delphi XE3.

我的应用程序的主要形式是处理不同 MDIChild 形式的 MDIForm。从其中一个,我可以显示模态形式,并从中调用 JclSimpleBringUpSendMailDialog 分配 ParentWND 参数和模态形式句柄。

通常,此方法会在模态表单前面打开电子邮件消息 window。
我的问题是有时电子邮件消息 window 位于应用程序主窗体下方,我无法再将其置于最前面。

所以应用程序等待 Jcl 方法的 return 值,我无法重新激活它。真正的问题是电子邮件 window 在我的应用程序后面,我无法撰写邮件。
我在互联网上搜索没有运气。

你遇到过这个问题吗?

您可能想要切换到使用 Outlook 对象模型而不是简单 MAPI。这样您就可以在显示消息之前先将 Outlook 的主 window 调到前台。可以通过将 Explorer 对象(返回购买 Application.ActiveExplorer)转换为 IOleWindow 并调用 IOleWindow.GetWindow 来检索 Outlook 的 HWND。一旦你有了 HWND,你可以使用类似下面的东西把它带到前台:

function ForceForegroundWindow(hWnd: THandle): BOOL;
var
  hCurWnd: THandle;
begin
  hCurWnd := GetForegroundWindow;
  AttachThreadInput(
    GetWindowThreadProcessId(hCurWnd, nil),
    GetCurrentThreadId, True);
  Result := SetForegroundWindow(hWnd);
  AttachThreadInput(
    GetWindowThreadProcessId(hCurWnd, nil),
    GetCurrentThreadId, False);
end;