2011-10-04 9 views
7

Word.Application OLEオブジェクトからウィンドウタイトルを取得する方法はありますか?私はFindWindowを使用してウィンドウを取得しようとするためにそれを使用したいと思います。Word OLEアプリケーションオブジェクトからアプリケーションタイトルを取得する

私はそうのように、OLEオブジェクトを作成し、既存のドキュメントを追加している:この時点で

App := CreateOLEObject('Word.Application'); 
App.Visible := True; 
App.Activate; 
Doc := App.Documents.Open('File.doc'); 

、キャプションの値は次のとおりです。

App.Caption => 'Microsoft Word' 
Doc.ActiveWindow.Caption => 'File.doc [Compatibility Mode]' 

をただし、ウィンドウタイトル実際にはFile.doc [Compatibility Mode] - Microsoft Wordです。

OLEオブジェクトからこのウィンドウタイトルを取得する方法はありますか(FindWindowを使用せずにHWND自体を取得するより良い方法はないようです)。私はウィンドウのタイトルは常に<doc caption> - <app caption>と仮定することは安全であるとは思わない。

私はFindWindow関数を使用して、正しいタイトルを渡すことで、より安全な方法で、フォアグラウンド(OLE Automation to launch MS Word and bring to front参照)を前面に表示できるようにするためのハンドルを取得したいと考えています。

EDITはここ

回避策を使用して修正がhttp://support.microsoft.com/kb/258511

App := CreateOLEObject('Word.Application'); 

// get the handle 
TempTitle := 'Temp - ' + IntToStr(Random(1000000)); 
App.Caption := TempTitle; 
Handle := FindWindow('OpusApp', PWideChar(TempTitle)); 
App.Caption := EmptyStr; 

App.Visible := True; 
App.Activate; 
Doc := App.Documents.Open('File.doc'); 

// bring to front 
SetForegroundWindow(Handle); 

答えて

3

で説明していますこれは、あなたが探しているものですか?

How to obtain the window handle for an Office Automation server

+1

リンクの後ろの記事についての簡単な説明を追加してください。 StackOverflowの一般的な使い勝手が向上します。 –

+1

うん、 "複数のインスタンスを持つことができるアプリケーションのウィンドウハンドルを見つける"の回避策が働いた。 私は、説明された方法を使用して一時的なアプリケーションのキャプションをランダム化し、後でそのウィンドウをフォアグラウンドに持ってくることによってハンドルを取得します。 – Andrew

+0

@マージャン - KB記事のタイトルを追加しました。 –

関連する問題