是否有從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);
請在鏈接背後的文章中加入一個簡短的描述。它增加了StackOverflow的一般可用性。 –
是的,在「查找可以具有多個實例的應用程序的窗口句柄」中找到了解決方法。 我通過使用所描述的方法隨機化臨時應用程序標題來獲取句柄,然後使用它將窗口稍後帶到前臺。 – Andrew
@Marjan - 我添加了知識庫文章的標題,希望有所幫助。 –