C# - Kapcsolódás már létező Word alkalmazáspéldányhoz

forráskód letöltése
Viszonylag egyszerű feladatnak tűnik a Microsoft Word alkalmazással úgy kapcsolatot teremteni, hogy az alkalmazásunkban hozzuk létre a Word alkalmazáspéldányt, majd nyitunk meg dokumentumokat. Azonban nehézségekbe ütközünk akkor, ha egy már elindított Word alkalmazáspéldánnyal kell kapcsolatot teremtenünk programból. Cikkünkben bemutatjuk, milyen módon lehetséges ez.
A mellékelt példa kipróbálása előtt indítson el egy Word alkalmazáspéldányt, majd ezt követően indítsa csak el a projekt fordítása után generált RuntimeConnect.exe alkalmazást.
A megoldást nem a Word elérését lehetővé tevő Microsoft Word Object Library COM komponens körül kell keresnünk, hiszen a névtér osztályainak segítségével csak a program által létrehozott alkalmazáspéldányt tudjuk elérni, és ott dokumentumokat létrehozni. Tény azonban, hogy a mellékelt példa elkészítéséhez erre a komponensre is szükségünk van.
A szükséges COM komponens a Microsoft Visual Basic.NET Runtime nevet viseli, vagyis a Visual Basic futtatórendszer képességeit vesszük igénybe a feladat megoldásához.
A komponensre hivatkozó referenciát most is a projekthez kell adnunk.
A referencia hozzáadása után a futtatórendszer Microsoft.VisualBasic.Interaction moduljának GetObject metódusára lesz szükségünk ahhoz, hogy kapcsolódjunk az elindított Word alkalmazáshoz, majd lekérdezzük annak aktív dokumentumát (ha van ilyen).
A hívás igen egyszerű. Word.Application típusra konvertáljuk a hívás eredményobjektumát, ha az nem NULL érték.
wa = (Word.Application) Microsoft.VisualBasic.Interaction.GetObject(null,"Word.Application");
A metódus első paramétere egy opcionálisan megadható elérési út, melyet most NULL-ra állítunk, a második paraméter az osztályt azonosító karakterlánc.
A Word.Application objektumnak már csak el kell érnünk az ActiveDocument property-jét, hogy lekérdezzük az aktív dokumentumot. Ennek a Name property-je adja meg az aktív dokumentum nevét.
if (wa.Documents.Count != 0)
{
  textBox1.Text = "Az aktív dokumentum: " + wa.ActiveDocument.Name;
}
else
{
  textBox1.Text = "Nincs megnyitott dokumentum";
}
Az objektum elérése után az alkalmazást aktivizáljuk is, vagyis a SetForegroundWindow metódussal a Word alkalmazás ablaka lesz az aktív ablak a Desktop-on.
SetForegroundWindow(FindWindow("OpusApp",GenerateHeader(name)));
Az „OpusApp” lesz az osztály neve a Word alkalmazás ablakának, míg a GenerateHeader metódusban megalkotjuk azt a fejlécet, mely alapján keressük az ablakot. Ezt a két adatot a FindWindow metódusnak adjuk át. Az API metódusok a user32.dll függvényei.