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