Laden...

Word öffnet sich nicht immer im Vordergrund

Erstellt von Paschulke vor 6 Jahren Letzter Beitrag vor 6 Jahren 4.301 Views
P
Paschulke Themenstarter:in
69 Beiträge seit 2011
vor 6 Jahren
Word öffnet sich nicht immer im Vordergrund

Hallo zusammen,

Ich verzweifle an einem merkwürdigen Problem:
Ich öffne Word aus meiner Anwendung heraus, setze für die WordApplication Visible auf true und rufe Activate() auf. Word öffnet sich bisher zuverlässig im Vordergrund, wenn ich das Programm aus dem Visual Studio heraus starte.

Wenn ich aber die exe starte, und aus meinem Programm heraus Word öffne, öffnet es sich (offenbar standardmäßig) im Hintergrund. Wenn Word einmal den Dreh bekommen hat, sich auf dem Rechner im Vordergrund zu öffnen, dann öffnet es sich offensichtlich auch in der exe zuverlässig für längere Zeit (!?) immer wieder im Vordergrund. Bis es irgendwann wieder nicht mehr funktioniert.

Auf Rechnern auf denen ich nie debugge (sprich beim Kunden), schaffe ich es also nie Word im Vordergrund zu öffnen.

Hat jemand irgendeine Idee woran das liegen kann?

D
261 Beiträge seit 2015
vor 6 Jahren

Ein wenig Code wäre nicht schlecht. Hast du schon das hier (stackoverflow- Bring Word Application to Front) probiert?

P
Paschulke Themenstarter:in
69 Beiträge seit 2011
vor 6 Jahren

Die Hinweise in dem stackoverflow Beitrag haben mich leider nicht weitergebracht...

Der Code insgesamt ist etwas schwierig hier darzustellen, da mehrere Klassen beteiligt sind. Interessant ist vielleicht der Kontext:
Es handelt sich um eine WPF Anwendung. Beim Klick auf einen Button wird die Execute-Methode eines über DataBinding angebundenen ICommands im ViewModel aufgerufen. Darin erfolgen mehrere asynchronerAufrufe (mit await). Am Ende der Methode wird als letzte Anweisung Word aktiviert.

Kann es sein, dass das Programm durch das DataBinding oder durch einen asynchronen Aufruf den Fokus nach der Aktivierung von Word zurückerhält?

Hier doch mal der Code der Execute Methode, wie er sinngemäß aussieht:


public async void OpenWordDocumentExecute()
{
    var wordDocument = await LoadWordDocumentAsync();
    var seriendruckfelder = await LoadSeriendruckfelderAsync();
    SetSeriendruckfelder(wordDocument, seriendruckfelder);
    ActivateWord(wordDocument.Application);
}

private static void ActivateWord(Application wordApplication)
{
    wordApplication.Visible = true;
    wordApplication.ActiveDocument.Activate(); //Vorschlag Stackoverflow
    wordApplication.Activate();
}

M
53 Beiträge seit 2008
vor 6 Jahren

Moin Paschulke,

ich hatte in meiner Anwendung die gleichen Probleme. Das einzige was zuverlässig funktionierte war nach dem document.Activate() folgender Code:


                Process[] processes = Process.GetProcessesByName("WINWORD");
                if (processes.Count() > 0)
                {
                    AllowSetForegroundWindow(processes[0].MainWindowHandle);
                    System.Threading.Thread.Sleep(50);
                    SetForegroundWindow(processes[0].MainWindowHandle);
                }

Gruß
muhtanten

T
461 Beiträge seit 2013
vor 6 Jahren

Hallo,

ich hatte ähnliches umsetzen müssen unter Excel. Allerding verwendete ich die Office Bibliotheken um damit zu arbeiten (da ich auch Excel-Dateien zusammenstellte)

Diese Bib. bieten ebenfalls Funktionen zum Anzeigen und Aktivieren des Excel-Fensters, da hatte ich nie solche Probleme.

Der einzige gravierende Nachteil sind dann halt die versch. Versionen UND ob's 32 oder 64 Bit-Systeme sind. (Hatte ich elegant lösen können, war aber auch mehr Arbeit...)

Ich habe den Titel mal angepasst, so dass Suchende auch etwas damit anfangen können. EDIT: Ich sollte beim Wort "Shift" im Titel das "f" nicht vergessen... 😄

P
Paschulke Themenstarter:in
69 Beiträge seit 2011
vor 6 Jahren

Vielen Dank für Eure Antworten!
Die Lösung mit "SetForegroundWindow" scheint (nach einem ersten Test) funktionieren zu können. Ich werde das nun weiter testen.

@ThomasE: Welche Office Bibliothek meinst Du? Ich hatte Microsoft.Office.Interop.Word verwendet. Damit hatte ich die Probleme. Meintest du eine andere?

P
Paschulke Themenstarter:in
69 Beiträge seit 2011
vor 6 Jahren

Weitere Tests waren auch erfolgreich. Vielen Dank muhtanten!!

T
461 Beiträge seit 2013
vor 6 Jahren

Vielen Dank für Eure Antworten!
Die Lösung mit "SetForegroundWindow" scheint (nach einem ersten Test) funktionieren zu können. Ich werde das nun weiter testen.

@ThomasE: Welche Office Bibliothek meinst Du? Ich hatte Microsoft.Office.Interop.Word verwendet. Damit hatte ich die Probleme. Meintest du eine andere?

Hallo,

ja ich hatte auch Microsoft.Office.Interop. in Verwendung (Versionen V12, V14, V15), nur halt für Excel. Ich denke das sollte normal keinen Unterschied machen.

Bei mir gab/gibt es die Probleme nicht unter Windows 7 und Windows 8.1 zumindest...

Könnte aber auch an der Umsetzung des Programms liegen. Bei mir wird dafür eine Console aufgerufen die das Umsetzt und sich danach gleich wieder schließt...

Grüße

Ich habe den Titel mal angepasst, so dass Suchende auch etwas damit anfangen können. EDIT: Ich sollte beim Wort "Shift" im Titel das "f" nicht vergessen... 😄

P
Paschulke Themenstarter:in
69 Beiträge seit 2011
vor 6 Jahren

Bei mir wird dafür eine Console aufgerufen die das Umsetzt und sich danach gleich wieder schließt...

Ja, ich schätze dass mein Problem irgendwie mit dem Databinding von WPF zusammenhängt. Danke für die Info!