Получение заголовка приложения из объекта OLE-приложения Word

Есть ли способ получить заголовок окна из объекта OLE Word.Application? Я хотел бы использовать его, чтобы попытаться получить окно с помощью 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 [ Режим совместимости] - Microsoft Word .

Есть ли способ получить этот заголовок окна из объекта OLE (лучшего способа получить сам HWND без использования FindWindow , похоже, нет)? Я сомневаюсь, что можно с уверенностью предположить, что заголовок окна всегда будет - .

Я хотел бы использовать функцию FindWindow , чтобы получить дескриптор окна, чтобы можно было вывести его на передний план (см. OLE Automation, чтобы запустить 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);

7
задан Community 23 May 2017 в 11:51
поделиться