2011-10-04 9 views
7

C'è un modo per ottenere il titolo della finestra da un oggetto OLE Word.Application? Mi piacerebbe usarlo per provare a ottenere la finestra usando FindWindow.Ottenere il titolo dell'applicazione da un oggetto applicazione OLE di Word

Sto creando un oggetto OLE e l'aggiunta di un documento esistente, in questo modo:

App := CreateOLEObject('Word.Application'); 
App.Visible := True; 
App.Activate; 
Doc := App.Documents.Open('File.doc'); 

A questo punto, i valori voce sono i seguenti:

App.Caption => 'Microsoft Word' 
Doc.ActiveWindow.Caption => 'File.doc [Compatibility Mode]' 

Tuttavia, il titolo della finestra è in realtà File.doc [Compatibility Mode] - Microsoft Word.

C'è un modo per ottenere il titolo di questa finestra dall'oggetto OLE (non sembra essere un modo migliore per ottenere l'HWND stesso senza utilizzare FindWindow)? Dubito che sia sicuro assumere che il titolo della finestra sarà sempre <doc caption> - <app caption>.

Mi piacerebbe utilizzare la funzione FindWindow per ottenere un handle per la finestra per poterlo portare in primo piano (vedere OLE Automation to launch MS Word and bring to front) in un modo leggermente più sicuro passando il titolo corretto.

EDIT

Ecco la correzione utilizzando la soluzione descritta nella 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); 

risposta

3
+1

Si prega di aggiungere una breve descrizione di ciò che l'articolo dietro il collegamento è di circa. Aumenta l'usabilità generale di StackOverflow. –

+1

Sì, la soluzione alternativa in "Trova l'handle di finestra per un'applicazione che può avere più istanze" ha funzionato. L'handle viene ottenuto randomizzando una didascalia di un'applicazione temporanea utilizzando il metodo descritto e quindi utilizzandola per portare la finestra in primo piano in un secondo momento. – Andrew

+0

@ Marjan - Ho aggiunto il titolo dell'articolo KB, speriamo che aiuti. –

Problemi correlati