JclMapi - 电子邮件消息窗口位于主窗体下方

时间:2015-01-28 11:20:37

标签: delphi mapi

我遇到了JclMAPI的一些麻烦。目前我正在使用JCL 2.6 Build 5178和Delphi XE3。

我的应用程序的主要形式是MDIForm,它处理不同的MDIChild表单。从其中一个我可以显示一个模态形式,然后我调用JclSimpleBringUpSendMailDialogParentWND参数与模态形式句柄分配。

通常,此方法会在模式窗体前打开电子邮件消息窗口。
我的问题是,有时电子邮件消息窗口位于应用程序mainForm下面,我无法将它带到前面。

因此应用程序等待Jcl方法的返回值,我无法重新激活它。真正的问题是电子邮件窗口在我的应用程序后面,我无法撰写消息 我在网上搜索没有运气。

你有没有遇到过这个问题?

1 个答案:

答案 0 :(得分:1)

您可能希望切换到使用Outlook对象模型而不是简单MAPI。这样,您可以在显示消息之前首先将Outlook的主窗口置于前台。可以通过将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;