Autor Beitrag
ThoPos
Hält's aus hier
Beiträge: 11

Windows, fast alle Versionen ab NT4
Delphi 2007, Delphi 10.1 Berlin
BeitragVerfasst: Di 17.07.12 17:19 
Hallo Zusammen,

ich stehe mal wieder auf dem Schlauch.

Ich möchte Daten per OLE in ein bestehendes und geöffnetes Word-Dokument einfügen. Dies ist kein Problem; damit habe ich bereits reichliche und gute Erfahrungen.

Da die Anwender aber oft zwischen mehreren geöffneten Word-Dokumenten hin und her springen, ist es in diesem Falle notwendig das gerade aktive Word-Dokument zu kennen.

Über die Funktion GetForegroundWindow ermittle ich das Handle des aktiven Fensters. Über dieses Handle prüfe ich, ob das Fenster zur Winword.exe gehört. Soweit so gut. Nur ab hier gibt es zwei Varianten, die der Anwender in den Optionen von Word selber definieren kann:
1. Word zeigt pro Dokument ein Fenster in der Taskleiste.
2. Word zeigt nur ein Fenster in der Taskleiste und dafür pro Dokument ein Fenster innerhalb von Word.

Im Fall 1 ist alles einfach. Denn hier kann ich die Caption des aktiven Fenster abfragen und habe dann auch den Dateinamen. Aber im Fall 2 ist die Caption nur 'Microsoft Word'. Jetzt ist meine Idee, daß ich per OLE eine Verbindung zum aktiven Word aufbaue und dann das aktive Dokument ermittle.

Jetzt meine Frage: Wie kann ich eine OLE-Verbindung analog GetActiveOLEObject zum aktiven Word aufbauen? Dabei muß beachtet werden, daß Word evtl. mehrfach läuft und ich die richtige Instanz erhalten muß. Denn GetActiveOLEObject liefert mir bei mehreren laufenden Winword.exe eine der Instanzen, aber nicht unbedingt die aktive Instanz.

Ich hoffe auf einen oder mehrere gute Tipps. Falls Ihr eine andere Variante kennt, den Namen das aktiven Word-Dokument zu ermitteln, nehme ich diesen Code natürlich gerne an.

Gruß aus Köln
Thomas
ThoPos Threadstarter
Hält's aus hier
Beiträge: 11

Windows, fast alle Versionen ab NT4
Delphi 2007, Delphi 10.1 Berlin
BeitragVerfasst: Mi 18.07.12 12:20 
Ich habe zum Probieren, ob meine Idee überhaupt funktioniert, mal mit GetActiveOLEObject experimentert.

1. Dabei stellte sich heraus, daß es meine Probleme nur mit MS WordVersionen bis 2003 gibt. Mit Word 2010 unter Win 7 gibt es nur eine Word-Instanz.

2. Die Idee mit dem OLE scheint unbrauchbar. Denn wenn man Word beendet, während die Delphi-App gerade eine aktive OLE-Verbindung hat, hat's sich. Word schließt alle sichtbaren Fenster, aber beendet den Prozeß nicht. Und das Delphi-Programm bleibt hängen und wartet vergeblich auf das Ende des Prozesses.

Also brauche ich hier eine andere Idee ....