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);
リンクの後ろの記事についての簡単な説明を追加してください。 StackOverflowの一般的な使い勝手が向上します。 –
うん、 "複数のインスタンスを持つことができるアプリケーションのウィンドウハンドルを見つける"の回避策が働いた。 私は、説明された方法を使用して一時的なアプリケーションのキャプションをランダム化し、後でそのウィンドウをフォアグラウンドに持ってくることによってハンドルを取得します。 – Andrew
@マージャン - KB記事のタイトルを追加しました。 –