2009-06-11 4 views
0

オートメーションを使用してMS Wordのドキュメントウィンドウを「復元」できるようにしたいと考えています。オートメーションを使用してMS Wordのドキュメントウィンドウを復元する方法

私はすでにアプリケーションオブジェクトを持っており、App.Activateを呼び出そうとしました。アクティブにするとウィンドウがウィンドウスタックの一番上に表示されますが、Wordが最小化されている場合は表示されません。私はWindowStateをMaximized、Minimized、Normalに設定することができますが、実際に行う必要があるのは、ユーザーが最小化する前の状態にウィンドウを復元することです(これは、ユーザーがタスクバーのアプリケーションのボタンをクリックするのと同じです) 。

これはWordオートメーションを使用して可能ですか?

実際にはC++をオートメーションに使用しているので、必要に応じてWin32 API関数を呼び出すことができます。

ウィンドウを直接復元する方法がない場合は、「どのようにしてActiveWindowのウィンドウハンドルを取得できますか?」という質問が表示されます。

答えて

0

を試してみてください。

このウィンドウオブジェクトは、キャプションという名前のプロパティを持っていApplication.ActiveWindow

を使用して、アクティブなウィンドウを取得します。キャプションはドキュメントウィンドウのタイトルに表示されます。

次に、Win32関数EnumWindows()を使用してWin32ウィンドウを検索します。 Win32関数GetWindowText()を使用して、EnumWindows()が返す各ウィンドウのウィンドウテキストを取得します。私は、ウィンドウテキスト内のキャプションを見つけようとし、余分なチェックとして、ウィンドウテキストにも文字列 'Microsoft Word'が含まれていることを確認します。

ウィンドウが見つかると、Win32関数ShowWindow(hWnd、SW_RESTORE)に渡すことができるWin32ウィンドウハンドルがあります。

また、Application.Activateを呼び出す必要があります。

このソリューションは完璧ではありません。たとえば、ウィンドウタイトルに「Microsoft Word」というテキストが常に含まれていると想定するのは本当に好きではありませんが、間違ったウィンドウを選びたくありません。

+0

EnumWindows() GetClassNameを呼び出す各ウィンドウに対して、そしてそれをWordウィンドウとして識別したクラス名 "OpusApp"を確認してください。 – Nick

0

は、次のように私はこれまでのところが出ている最良の方法がある::ShowWindow(handle, SW_RESTORE)

+0

私はこのアプローチを考えていましたが、オブジェクトモデルはウィンドウハンドルを得る方法を提供していないようです。これは、:: ShowWindow()を呼び出すために必要なものです。 – jmatthias

関連する問題