2009-06-11 4 views
0

Je souhaiterais pouvoir «restaurer» la fenêtre de document de MS Word à l'aide de l'automatisation.Comment «restaurer» la fenêtre de document de MS Word à l'aide de l'automatisation

J'ai déjà l'objet application et j'ai essayé d'appeler App.Activate. Activer amènera la fenêtre en haut de la pile de fenêtres mais pas si Word est réduit. Je peux définir WindowState sur Maximized, Minimized et Normal, mais ce que je dois vraiment faire est de restaurer la fenêtre dans l'état dans lequel elle se trouvait avant que l'utilisateur la minimise (cela équivaudrait à cliquer sur le bouton de l'application dans la barre des tâches) .

Est-ce possible en utilisant Word automation?

Je suis en fait en utilisant C++ à l'automatisation, donc je suis capable d'appeler des fonctions API Win32 si nécessaire.

S'il n'y a pas de façon directe de restaurer la fenêtre, la question devient: «comment puis-je obtenir le handle de fenêtre de l'ActiveWindow?

Répondre

0

La meilleure façon que je suis venu avec est à ce jour comme suit.

Obtenez la fenêtre active à l'aide Application.ActiveWindow

Cet objet fenêtre a une propriété nommée Légende. La légende apparaît dans le titre de la fenêtre de document. Puis j'utilise la fonction Win32 EnumWindows() pour rechercher la fenêtre Win32. Je reçois le texte de la fenêtre pour chaque fenêtre retournée par EnumWindows() en utilisant la fonction Win32 GetWindowText(). Je tente de trouver la légende dans le texte de la fenêtre et comme une vérification supplémentaire, je m'assure que le texte de la fenêtre contient également la chaîne «Microsoft Word».

Une fois que je trouve la fenêtre, j'ai alors son handle de fenêtre Win32 que je peux ensuite passer à la fonction Win32 ShowWindow (hWnd, SW_RESTORE).

Vous devez également appeler Application.Activate.

Cette solution n'est pas parfaite, par exemple je n'aime pas vraiment supposer que le titre de la fenêtre contiendra toujours le texte 'Microsoft Word' mais je ne veux pas non plus choisir la mauvaise fenêtre.

+0

Vous feriez mieux d'utiliser EnumWindows() mais ensuite pour chaque fenêtre appelant GetClassName, puis vérifiez le nom de la classe "OpusApp" qui l'a identifié comme une fenêtre Word. – Nick

0

Essayez ::ShowWindow(handle, SW_RESTORE)

+0

J'ai pensé à cette approche, mais le modèle d'objet ne semble pas fournir un moyen d'obtenir le handle de la fenêtre, dont j'aurais besoin pour appeler :: ShowWindow() – jmatthias

Questions connexes