Automation 我如何';恢复';MS Word';使用自动化创建文档窗口

Automation 我如何';恢复';MS Word';使用自动化创建文档窗口,automation,ms-word,ms-office,Automation,Ms Word,Ms Office,我希望能够使用自动化“恢复”MS Word的文档窗口 我已经有了应用程序对象,并尝试调用App.Activate。Activate将使窗口位于窗口堆栈的顶部,但如果Word最小化,则不会。我可以将窗口状态设置为最大化、最小化和正常,但我真正需要做的是将窗口恢复到用户将其最小化之前的状态(这相当于用户单击任务栏中的应用程序按钮) 使用wordautomation可以做到这一点吗 我实际上是用C++来实现自动化,所以如果需要的话,我可以调用Win32 API函数。 如果没有直接的方法来恢复窗口,那么

我希望能够使用自动化“恢复”MS Word的文档窗口

我已经有了应用程序对象,并尝试调用App.Activate。Activate将使窗口位于窗口堆栈的顶部,但如果Word最小化,则不会。我可以将窗口状态设置为最大化、最小化和正常,但我真正需要做的是将窗口恢复到用户将其最小化之前的状态(这相当于用户单击任务栏中的应用程序按钮)

使用wordautomation可以做到这一点吗

我实际上是用C++来实现自动化,所以如果需要的话,我可以调用Win32 API函数。
如果没有直接的方法来恢复窗口,那么问题就变成了‘如何获得ActiveWindow的窗口句柄?’

试试
::ShowWindow(句柄,SW_restore)

到目前为止,我想到的最佳方法如下

使用Application.ActiveWindow获取活动窗口

此窗口对象具有名为Caption的属性。标题显示在文档窗口的标题中

然后,我使用Win32函数EnumWindows()搜索Win32窗口。我使用Win32函数GetWindowText()获取EnumWindows()返回的每个窗口的窗口文本。我试图在窗口文本中找到标题,作为额外检查,我确保窗口文本也包含字符串“Microsoft Word”

一旦我找到了窗口,我就有了它的Win32窗口句柄,然后我可以将它传递给Win32函数ShowWindow(hWnd,SW_RESTORE)

您还必须调用Application.Activate


此解决方案并不完美,例如,我不想假设窗口标题总是包含文本“Microsoft Word”,但我也不想选择错误的窗口。

我想过这种方法,但对象模型似乎无法提供获取窗口句柄的方法,为了调用::ShowWindow(),最好使用EnumWindows(),但对于调用GetClassName的每个窗口,然后检查将其标识为Word窗口的类名“OpusApp”。