Pencere başlığını bir Word.Application OLE nesnesinden almanın bir yolu var mı? FindWindow
'u kullanarak pencereyi denemek için kullanmak istiyorum.Bir Word OLE uygulama nesnesinden uygulama başlığı alma
Öyle gibi bir OLE nesnesi oluşturma ve varolan bir belgeyi ekliyorum: Bu noktada
App := CreateOLEObject('Word.Application');
App.Visible := True;
App.Activate;
Doc := App.Documents.Open('File.doc');
, altyazı değerleri aşağıdaki gibidir:
App.Caption => 'Microsoft Word'
Doc.ActiveWindow.Caption => 'File.doc [Compatibility Mode]'
Ancak pencere başlığı aslında File.doc [Compatibility Mode] - Microsoft Word
.
Bu pencere başlığını OLE nesnesinden almanın bir yolu var mı (FindWindow
'u kullanmadan HWND'nin kendisinin daha iyi bir yolu yok gibi görünüyor)? Pencere başlığının her zaman <doc caption> - <app caption>
olacağını varsaymaktan şüpheliyim.
Pencerede bir tanıtıcıyı ön plana getirebilmek için (bkz. OLE Automation to launch MS Word and bring to front) doğru başlıktan geçerek biraz daha güvenli bir şekilde almak için FindWindow
işlevini kullanmak istiyorum.
DÜZENLEME İşte
geçici çözümü kullanarak düzeltme 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);
bağlantının arkasındaki makale hakkında ne olduğuna dair kısa bir açıklama ekleyin. StackOverflow'un genel kullanılabilirliğini artırır. –
Evet, "Birden çok örneği olabilir bir uygulama için pencere tanıtıcısı bulun" çalışmasında geçici çözüm. Tanımlı yöntemi kullanarak geçici bir uygulama yazısı rasgele hale getirerek tanıtıcıyı alıyorum ve daha sonra pencereyi ön plana getirmek için kullanın. – Andrew
@Marjan - KB makalesinin başlığını ekledim, umarım yardımcı olur. –