【问题标题】:Getting application title from a Word OLE application object从 Word OLE 应用程序对象获取应用程序标题
【发布时间】: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);

【问题讨论】:

    标签: delphi winapi ms-word ole


    【解决方案1】:

    【讨论】:

    • 请对链接后面的文章内容进行简短描述。它提高了 StackOverflow 的一般可用性。
    • 是的,“查找可以具有多个实例的应用程序的窗口句柄”中的解决方法有效。我通过使用所描述的方法随机化一个临时应用程序标题来获得句柄,然后使用它将窗口带到前台。
    • @Marjan - 我添加了知识库文章的标题,希望对您有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 2011-03-21
    相关资源
    最近更新 更多