Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Word öffnet sich nicht immer im Vordergrund
Paschulke
myCSharp.de - Member



Dabei seit:
Beiträge: 63

Themenstarter:

Word öffnet sich nicht immer im Vordergrund

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
dannoe
myCSharp.de - Member



Dabei seit:
Beiträge: 174

beantworten | zitieren | melden

Ein wenig Code wäre nicht schlecht. Hast du schon das hier (stackoverflow- Bring Word Application to Front) probiert?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von dannoe am .
private Nachricht | Beiträge des Benutzers
Paschulke
myCSharp.de - Member



Dabei seit:
Beiträge: 63

Themenstarter:

beantworten | zitieren | melden

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();
}
private Nachricht | Beiträge des Benutzers
muhtanten
myCSharp.de - Member



Dabei seit:
Beiträge: 53

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
ThomasE.
myCSharp.de - Member



Dabei seit:
Beiträge: 453

beantworten | zitieren | melden

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...
private Nachricht | Beiträge des Benutzers
Paschulke
myCSharp.de - Member



Dabei seit:
Beiträge: 63

Themenstarter:

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
Paschulke
myCSharp.de - Member



Dabei seit:
Beiträge: 63

Themenstarter:

beantworten | zitieren | melden

Weitere Tests waren auch erfolgreich. Vielen Dank muhtanten!!
private Nachricht | Beiträge des Benutzers
ThomasE.
myCSharp.de - Member



Dabei seit:
Beiträge: 453

beantworten | zitieren | melden

Zitat von Paschulke
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...
private Nachricht | Beiträge des Benutzers
Paschulke
myCSharp.de - Member



Dabei seit:
Beiträge: 63

Themenstarter:

beantworten | zitieren | melden

Zitat von ThomasE.
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!
private Nachricht | Beiträge des Benutzers