Einzelnen Beitrag anzeigen

Bernhard73

Registriert seit: 4. Jul 2010
36 Beiträge
 
Delphi 11 Alexandria
 
#1

Automatisierung einer SPEZIFISCHEN Word-Instanz bei Vorhandensein mehrerer Instanzen

  Alt 12. Sep 2020, 16:01
Hallo zusammen,

ich arbeite gerade an einem Textgenerator für den medizinischen Bereich, der aus stichwortartigen Angaben einen Befundtext generiert und in eine externe Befundverwaltungssoftware einfügt. Die externe Software nutzt Microsoft Word als Texteditor in Form eines eingebetteten Plugins, die Texteinfügung erfolgt per Word-Automatisierung.
Problematisch ist jetzt, das im Arbeitsumfeld eigentlich immer mindestens zwei und manchmal noch mehr Word-Instanzen gleichzeitig laufen. Da bei herkömmlicher Herangehensweise

wrdApp := GetActiveOleObject('Word.Application');

die automatisierte Instanz ist stets die ist, die zuerst gestartet wurde, und die meist nicht die richtige ist, muss ich anders vorgehen.

Nach einigem herumgooglen bin ich u.a. auf

AccessibleObjectFromWindow (zur Verfügung gestellt in OleAcc)

gestoßen. Der Funktionsbeschreibung nach könnte es auf diesem Wege funktionieren.

hatsgeklappt:= AccessibleObjectFromWindow( windowhandle, OBJID_NATIVEOM, StringToGUID('{00020400-0000-0000-C000-000000000046}'), rueckgabewert);

- Das Handle des Dokumentwindows kann ich über die Caption der Instanz und anschließende Enummerierung der Unterwindows ermitteln, das funktioniert soweit.
- OBJID_NATIVEOM ist eine Konstante und soll wohl $FFFFFFF0 sein
- als nächstes die GUID
- rueckgabewert ist laut Microsoft Doku "Address of a pointer variable that receives the address of the specified interface."

Ich bin mir nun nicht so ganz sicher wie ich "rueckgabewert" zu deklarieren habe und wie ich über diesen Rückgabewert dann wieder in ein Objekt verwandele, mit dem man "wie gewohnt" arbeiten kann, wie z.B.

<blabla>.Selection.TypeText("Hallo!");

Wenn mir hier jemand auf die Sprünge helfen könnte, wäre ich dankbar. Auch für einen Hinweis, wenn ich hier möglicherweise ganz auf dem Holzweg bin. Mit dem Thema kenne ich mich leider nicht wirklich aus...

Danke
Bernhard
  Mit Zitat antworten Zitat