Get Object from Process

Jun 11, 2013 at 1:12 PM
Hello,

i need an Word-Object from the running word process.

do it in this way:
Word._Application wordApplication = (Word._Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application");
throw an exception
Das COM-Objekt des Typs \"Microsoft.Office.Interop.Word.ApplicationClass\" kann nicht in den Klassentyp \"NetOffice.WordApi._Application\" umgewandelt werden. Instanzen von Typen, die COM-Komponenten repräsentieren, können nicht in andere Typen umgewandelt werden, die keine COM-Komponenten repräsentieren. Eine Umwandlung in Schnittstellen ist jedoch möglich, sofern die zugrunde liegende COM-Komponente QueryInterface-Aufrufe für die IID der Schnittstelle unterstützt.

The COM object of type \ "Microsoft.Office.Interop.Word.ApplicationClass \" can not be converted to the class type \ "NetOffice.WordApi._Application \".
Instances of types that represent COM components can not be converted to other types that do not represent COM components.
However, conversion to interfaces is possible, provided that supports the underlying COM component QueryInterface calls for the IID of the interface.
If i try to get the object in this way
Type wordType = Type.GetTypeFromProgID("Word.Application");
object wordProxy = Activator.CreateInstance(wordType);
wordApplication = new Word._Application(null, wordProxy);
than its starting at
object wordProxy = Activator.CreateInstance(wordType);
a new word process in taskmanager.

But i dont need the object of a new word instance in taskmanager, i need exactly that object of the active word instance.

may someone can help me?

Tanks a lot and...sorry for my bad english.
Coordinator
Jun 11, 2013 at 1:35 PM
Du musst den ROT Proxy den du bekommst doch einfach nur genauso in die Wrapperklasse von NetOffice stecken wie du es beim erzeugen einer ganz neuen Instanz tust. object wordProxy = System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application");
wordApplication = new Word._Application(null, wordProxy); Sebastian ________________________________
Jun 11, 2013 at 2:12 PM
Ähm ja Danke. Stimmt. Keine Ahnung warum ich das vorher so durcheinandern gemacht habe....thx.
Nov 20, 2013 at 12:27 PM
Hallo,

also bei Word hat das natürlich ganz wunderbar geklappt. Allerdings habe ich nun ein Problem mit Excel. Ich bräuchte jede geöffnete Arbeitsmappe, bekomme aber immer nur die gleiche. Ich habe auch versucht, verschiedene Proxies aus der ROT zu bekommen, was wohl auch funktioniert, aber immer wenn ich dann pro rotproxy mit
_excelApplication = new Excel.Application(null, excelProxy);
ein Excel-Object erzeuge, habe ich die selbe Arbeitsmappe im Zugriff.

Hat jemand einen Tipp?
Coordinator
Nov 20, 2013 at 12:44 PM
Ja die ROT zeigt zwar alle Elemente an aber liefert immer nur die erste Instanz zurück wie sich herausgestellt hat.
Siehe dazu: Issue 20313 https://netoffice.codeplex.com/workitem/20313

Im letzten Source State findest du im Ordner Tests\Concept Tests\ObjectFromWindow
eine Lösung die tatsächlich Zugriff auf alle laufenden Excel Instanzen ermöglicht und im nächsten Release mit eingebaut ist.

*Sebastian
Nov 20, 2013 at 2:23 PM
Super! Danke für die Info :)