2011-10-04 45 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)。

編輯

這裏的使用解決方法修復在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
+1

請在鏈接背後的文章中加入一個簡短的描述。它增加了StackOverflow的一般可用性。 –

+1

是的,在「查找可以具有多個實例的應用程序的窗口句柄」中找到了解決方法。 我通過使用所描述的方法隨機化臨時應用程序標題來獲取句柄,然後使用它將窗口稍後帶到前臺。 – Andrew

+0

@Marjan - 我添加了知識庫文章的標題,希望有所幫助。 –

相關問題