【发布时间】:2011-10-04 18:06:45
【问题描述】:
有没有办法从 Word.Application OLE 对象中获取窗口标题?我想用它来尝试使用FindWindow 获取窗口。
我正在创建一个 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);
【问题讨论】: