Laden...

[Erledigt] Outlook: E-Mail-Fenster in den Vordergrund bringen

Erstellt von pollito vor 7 Jahren Letzter Beitrag vor 7 Jahren 2.941 Views
pollito Themenstarter:in
314 Beiträge seit 2010
vor 7 Jahren
[Erledigt] Outlook: E-Mail-Fenster in den Vordergrund bringen

Hallo!

Ich habe ein kleines Programm erstellt, dass eine Outlook-E-Mail erzeugt und das Outlook-E-Mail-Fenster anzeigt, damit der Benutzer diese vervollständigen kann. Es funktioniert auch, allerdings wandert das Outlook-E-Mail-Fenster immer nach hinten, so dass der Benutzer es jedes mal nach vorne holen muss.

Ich könnte das Outlook-Fenster modal starten, so dass es im Vordergrund bleibt, aber das ist unpraktisch, da Outlook damit blockiert wird.

Ich habe vieles versucht und auch hier und im Netz gesucht, aber nichts funktioniert wirklich.

Es wäre toll, wenn mir jemand einen guten Tipp geben könnte, wie ich das Outlook-E-Mail-Fenster nach vorne bringen kann.

Im Voraus herzlichen Dank!

Hier der etwas vereinfachte Code:

using System;
using System.Windows;
using ol = Microsoft.Office.Interop.Outlook;

namespace isemailoveroutlook
{
	/// <summary>
	/// Interaktionslogik für MainWindow.xaml
	/// </summary>
	public partial class MainWindow : Window
	{
		/// <summary>
		/// 
		/// </summary>
		public MainWindow()
		{
			InitializeComponent();

			// Übergeben müssen "From" und "To". Wenn das Standardkonto zu verwenden ist,
			// dann sollte eine leere Zeichenkette übergeben werden.
			if (Environment.GetCommandLineArgs().Length != 3)
			{
				MessageBox.Show
				(
					"Falsche Anzahl Argumente. \"From\" und \"To\" müssen übergeben werden. \"From\" darf leer sein, falls Standardkonto zu verwenden ist.",
					"Fehler",
					MessageBoxButton.OK,
					MessageBoxImage.Error
				);
				Application.Current.Shutdown(-1);
				return;
			}

			try
			{
				// Zunächst prüfen, ob Outlook läuft. Wenn nicht, dann starten.
				if (System.Diagnostics.Process.GetProcessesByName("OUTLOOK").Length <= 0)
				{
					System.Diagnostics.Process OutlookProcess = new System.Diagnostics.Process();
					OutlookProcess.StartInfo.FileName = "OUTLOOK.EXE";
					OutlookProcess.Start();
				}

				// Neue Outlook-Instanz erzeugen.
				ol.Application outlook = new ol.Application();

				// Neue E-Mail erstellen.
				ol.MailItem mail = (ol.MailItem)outlook.CreateItem(ol.OlItemType.olMailItem);
				string [] CommandLine = Environment.GetCommandLineArgs();

				// Wenn der Absender angegeben wurde, dessen Accounnt nutzen. Das kann
				// nur dann funktionieren, wenn das Postach in Outlook eingerichtet ist.
				if (CommandLine[1] != string.Empty)
				{
					ol.Account account = outlook.Session.Accounts[CommandLine[1]];
					mail.SendUsingAccount = account;
				}

				mail.To = CommandLine[2];

				mail.GetInspector.Activate();

				mail = null;

				outlook = null;

			}
			catch (Exception e)
			{
				MessageBox.Show
				(
					e.Message,
					$"Fehler – {e.Source}",
					MessageBoxButton.OK,
					MessageBoxImage.Error
				);
				Application.Current.Shutdown(-2);
				return;
			}
			Application.Current.Shutdown(0);
		}
	}
}

René

pollito Themenstarter:in
314 Beiträge seit 2010
vor 7 Jahren

Ich habe den Verursacher gefunden. Mein Miniprogramm wird von einem ERP-System aufgerufen. Dieses ERP-System ist in zwei Versionen vorliegend: Die alte Version verursacht das Problem nicht, während die neue dieses Verhalten an den Tag legt.

Wenn ich mein Progrämmchen mit Sleep pausiere, bleibt das Outlook-E-Mail-Fenster im Vordergrund, bis die Zeit abgelaufen ist und es sich beendet. Danach drängt sich die neue Version des ERP-Systems in der Vordergrund, womit der Verursacher gefunden ist.

René