强制使用MS Outlook(在我的应用程序顶部)

时间:2015-05-04 07:52:42

标签: delphi outlook

我使用以下函数来使用MS Outlook 2010发送邮件 Outlook不会出现在我的应用程序前面(MDI app pmNone,poDefaultPosOnly) 当Outlook在前面弹出并且刚刚在后台打开时(图标在状态栏上闪烁),我无法找到任何连续性 我的问题是:有没有任何方法可以强制Outlook在所有其他应用程序面前弹出?

function SendMailOutlook(const aFrom, aSubject, aBody, aTo, aCc, aBcc: string; aMailFiles: TStringList; aReceipt: boolean; aPreview: boolean = True): boolean;
var
  Outlook: OleVariant;
  MailItem: OleVariant;
  i: integer;
const
  olMailItem = $00000000;
begin
  try
    try
      Outlook := GetActiveOleObject('Outlook.Application');
    except
      Outlook := CreateOleObject('Outlook.Application');
    end;
    MailItem := Outlook.CreateItem(olMailItem);
    if olAccountValid(aFrom) then
      MailItem.SendUsingAccount := Outlook.Session.Accounts.Item(aFrom);
    MailItem.To := aTo;
    MailItem.Cc := aCc;
    MailItem.Bcc := aBcc;
    MailItem.Subject := aSubject;
    MailItem.Body := aBody;
    for i := 0 to aMailFiles.Count - 1 do
      MailItem.Attachments.Add(aMailFiles.Strings[i]);
    MailItem.ReadReceiptRequested := aReceipt;
    MailItem.OriginatorDeliveryReportRequested := aReceipt;
    if aPreview = True then
      MailItem.Display(True)
    else
      MailItem.Send;
    Result := MailItem.Sent;
  except
    on E:Exception do
      begin
        Logfile.Error('U_Mailing.Outlook.SendMailOutlook: ' + E.Message);
        Result := False;
      end;
  end;
end;

我不知道如何显示我工作的代码,所以我只想编辑我的问题并将其添加到那里。如果不是这样的话,请原谅。

function SendMailOutlook(const aFrom, aSubject, aBody, aTo, aCc, aBcc: string; aMailFiles: TStringList; aReceipt: boolean; aPreview: boolean = True): boolean;
var
  Outlook: OleVariant;
  MailItem: OleVariant;
  i: integer;
  MailInspector: variant;
const
  olMailItem = $00000000;
begin
  try
    try
      Outlook := GetActiveOleObject('Outlook.Application');
    except
      Outlook := CreateOleObject('Outlook.Application');
    end;
    MailItem := Outlook.CreateItem(olMailItem);
    if olAccountValid(aFrom) then
      MailItem.SendUsingAccount := Outlook.Session.Accounts.Item(aFrom);
    MailItem.To := aTo;
    MailItem.Cc := aCc;
    MailItem.Bcc := aBcc;
    MailItem.Subject := aSubject;
    MailItem.Body := aBody;
    for i := 0 to aMailFiles.Count - 1 do
      MailItem.Attachments.Add(aMailFiles.Strings[i]);
    MailItem.ReadReceiptRequested := aReceipt;
    MailItem.OriginatorDeliveryReportRequested := aReceipt;

    if aPreview = True then
      begin
        MailInspector := MailItem.GetInspector;
        MailInspector.Display(True);
      end
    else
      MailItem.Send;
    Result := MailItem.Sent;
  except
    on E:Exception do
      begin
        Logfile.Error('U_Mailing.Outlook.SendMailOutlook: ' + E.Message);
        Result := False;
      end;
  end;
end;

1 个答案:

答案 0 :(得分:1)

你需要使用IOleWindow / AttachThreadInput / SetForegroundWindow来做到这一点。

请参阅how to make the Outlook Compose window top most?

另见c# bring outlook window to front