Получение заголовка приложения из объекта приложения Word OLE - PullRequest
7 голосов
/ 04 октября 2011

Есть ли способ получить заголовок окна из 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 [Compatibility Mode] - Microsoft Word.

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

Я хотел бы использовать функцию FindWindow, чтобы получить дескриптор окна, чтобы иметь возможность вывести его на передний план.(см. OLE Automation для запуска MS Word и вывода на передний план ) в несколько более безопасной манере, указав правильный заголовок.

EDIT

Вот исправление с использованием обходного пути, описанного в 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);

1 Ответ

3 голосов
/ 04 октября 2011
...