And*_*rew 7 delphi winapi ole ms-word
有没有办法从Word.Application OLE对象获取窗口标题?我想用它来尝试使用窗口FindWindow
.
我正在创建一个OLE对象并添加一个现有文档,如下所示:
App := CreateOLEObject('Word.Application');
App.Visible := True;
App.Activate;
Doc := App.Documents.Open('File.doc');
Run Code Online (Sandbox Code Playgroud)
此时,标题值如下:
App.Caption => 'Microsoft Word'
Doc.ActiveWindow.Caption => 'File.doc [Compatibility Mode]'
Run Code Online (Sandbox Code Playgroud)
但是,窗口标题实际上是File.doc [Compatibility Mode] - Microsoft Word
.
有没有办法从OLE对象获取此窗口标题(似乎没有更好的方法来获取HWND本身而不使用FindWindow
)?我怀疑假设窗口标题永远是安全的<doc caption> - <app caption>
.
我想通过传递正确的标题,使用该FindWindow
函数来获取窗口的句柄,以便能够以更安全的方式将其带到前台(请参阅OLE自动化以启动MS Word并将其带到前面).
编辑
以下是使用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);
Run Code Online (Sandbox Code Playgroud)