0

我正在创建 Outlook 邮件。有时,Outlook Compose 窗口会出现在其他窗口的后面。

我怎样才能使它成为最顶级的?

String address = "someone@example.com";

Outlook.Application oApp = new Outlook.Application();
Outlook._MailItem oMailItem = (Outlook._MailItem)oApp.CreateItem(Outlook.OlItemType.olMailItem);
oMailItem.To = address;

oMailItem.Subject = "Help";

oMailItem.BodyFormat = Outlook.OlBodyFormat.olFormatPlain;
oMailItem.Attachments.Add("H:\\file.txt");

oMailItem.Body = "Call me";  
// body, bcc etc...
oMailItem.Display(true);

我正在使用 WinForm 和 .Net 2.0(目标)

4

1 回答 1

-1

首先调用MailItem.GetInspector 获取Inspector 对象(然后可以调用Inspector.Display),其次将Inspector 转换为IOleWindow 接口并调用IOleWindows::GetWindow 来获取inspector 的HWND。一旦你有了它,你就可以调用 SetForegroundWindow。要记住的一件事是,如果父进程不在前台,Windows 不会将窗口带到前台。您需要为此使用 AttachThreadInput 函数 - 见下文(Delphi):

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;
于 2013-07-22T16:52:11.640 回答