Как «восстановить» окно документа MS Word с помощью автоматизации - PullRequest
0 голосов
/ 11 июня 2009

Я хотел бы иметь возможность «восстановить» окно документа MS Word с помощью автоматизации.

У меня уже есть объект приложения, и я попытался вызвать App.Activate. Активация приведет окно к вершине стека окон, но не, если Word свернут. Я могу установить WindowState на Maximized, Minimized и Normal, но мне действительно нужно восстановить окно до того состояния, в котором оно находилось до того, как пользователь свернул его (это было бы эквивалентно нажатию пользователем кнопки приложения на панели задач) .

Возможно ли это с помощью автоматизации Word?

На самом деле я использую C ++ для автоматизации, поэтому при необходимости могу вызывать функции Win32 API.

Если нет прямого способа восстановить окно, возникает вопрос: «Как я могу получить дескриптор окна ActiveWindow?»

Ответы [ 2 ]

0 голосов
/ 12 июня 2009

Лучший способ, которым я до сих пор придумал, заключается в следующем.

Получить активное окно с помощью Application.ActiveWindow

Этот объект окна имеет свойство с именем Caption. Заголовок появляется в заголовке окна документа.

Затем я использую функцию Win32 EnumWindows () для поиска окна Win32. Я получаю текст окна для каждого окна, возвращаемого EnumWindows () с помощью функции Win32 GetWindowText (). Я пытаюсь найти заголовок в тексте окна и в качестве дополнительной проверки проверяю, чтобы текст окна также содержал строку «Microsoft Word».

Как только я нахожу окно, у меня появляется дескриптор окна Win32, который я затем могу передать функции WinW ShowWindow (hWnd, SW_RESTORE).

Вы также должны позвонить в Application.Activate.

Это решение не является идеальным, например, я не очень хочу предполагать, что заголовок окна всегда будет содержать текст «Microsoft Word», но я также не хочу выбирать неправильное окно.

0 голосов
/ 11 июня 2009

Попробуйте ::ShowWindow(handle, SW_RESTORE)

...