2009-06-11 9 views
0

Ich möchte das Dokumentfenster von MS Word mithilfe von Automation wiederherstellen können.Wie kann ich das Dokumentfenster von MS Word mithilfe der Automatisierung wiederherstellen?

Ich habe bereits das Anwendungsobjekt und ich habe versucht, App.Activate aufzurufen. Aktivieren wird das Fenster an den Anfang des Fensterstacks bringen, aber nicht, wenn Word minimiert ist. Ich kann den WindowState auf Maximiert, Minimiert und Normal setzen, aber was ich wirklich tun muss, ist das Fenster in den Zustand zurückzusetzen, in dem es war, bevor der Benutzer es minimiert hat (dies würde dem Benutzer entsprechen, der auf die Schaltfläche der Anwendung in der Taskleiste klickt) .

Ist dies mit Word-Automatisierung möglich?

Ich benutze tatsächlich C++ zur Automatisierung, damit ich Win32 API Funktionen aufrufen kann, falls erforderlich.

Wenn es keine direkte Möglichkeit gibt, das Fenster wiederherzustellen, dann lautet die Frage: "Wie kann ich den Fenstergriff von ActiveWindow bekommen?"

Antwort

0

Die beste Weise, die ich mit so weit gekommen sind wie folgt.

das aktive Fenster

Dieses Fenster Objekt verfügt über eine Eigenschaft mit dem Namen Beschriftung mit Application.ActiveWindow Get. Die Beschriftung wird im Titel des Dokumentfensters angezeigt.

Ich verwende dann die Win32-Funktion EnumWindows(), um nach dem Win32-Fenster zu suchen. Ich erhalte den Fensterext für jedes von EnumWindows() zurückgegebene Fenster mit der Win32-Funktion GetWindowText(). Ich versuche, die Beschriftung im Fenstertext zu finden, und als zusätzliche Überprüfung stelle ich sicher, dass der Fenstertext auch die Zeichenfolge 'Microsoft Word' enthält.

Sobald ich das Fenster finde, habe ich dann sein Win32-Fensterhandle, das ich dann an die Win32-Funktion ShowWindow (hWnd, SW_RESTORE) übergeben kann.

Sie müssen auch Application.Activate aufrufen.

Diese Lösung ist nicht perfekt, zum Beispiel möchte ich nicht wirklich davon ausgehen, dass der Fenstertitel immer den Text "Microsoft Word" enthält, aber ich möchte auch nicht das falsche Fenster auswählen.

+0

Sie wären besser dran mit EnumWindows() Rufen Sie dann für jedes Fenster GetClassName auf, und suchen Sie nach dem Klassennamen "OpusApp", der es als ein Word-Fenster identifiziert. – Nick

0

Versuchen ::ShowWindow(handle, SW_RESTORE)

+0

Ich habe über diesen Ansatz nachgedacht, aber das Objektmodell scheint keine Möglichkeit zu bieten, das Fensterhandle zu erhalten, das ich benötigen würde, um :: ShowWindow() aufzurufen – jmatthias

Verwandte Themen