C# - Szinonima meghatározása saját alkalmazásban a Word segítségével

forráskód letöltése
A MS Word-ben rendelkezésünkre áll egy szinonima szótár. Ebben a cikkben annak járunk utána, hogy miként használhatjuk fel ezt a szinonima szótárt saját alkalmazásunkban úgy, hogy a Word ez idő alatt rejtve maradjon a felhasználó előtt, aki így csak saját alkalmazásunkat látja.
Új alkalmazásunkhoz ne felejtsük el hozzáadni egy referenciát a Word-höz, mivel csak így érhetjük el annak szolgáltatásait. (Project - Add reference - COM - Microsoft Word)
Miután felvettük a kapcsolatot a Word alkalmazással, létrehozunk egy üres dokumentumot, mivel csak így tudjuk használni a szinonima szótárt.
    private void button1_Click(object sender, System.EventArgs e)
    {
      listBox1.Items.Clear();
      Word.Application wa = new Word.Application();
      wa.Documents.Add(ref m, ref m, ref m, ref m);
A Word program objektumától lekérjük a szinonima információt a get_SynonymInfo függvény segítségével. Első paraméterként a kérdéses szót adjuk át, másodikként a magyar nyelv kódját, feltételezve, hogy a beírt szó is magyar én ennek szinonimáit keressük.
      object lang = Word.WdLanguageID.wdHungarian;
      Word.SynonymInfo si = wa.get_SynonymInfo(textBox1.Text, ref lang);
Ha a SynonymInfo által visszaadott objektum Found property-je igaz, akkor van szinonima találat.
      if (si.Found)
      {
Ha van találat, akkor egy kettős for ciklusra lesz szükségünk, hogy az összes szinonimát kiolvashassuk. Az első ciklus 1-től a talált jelentések számáig megy, amit a MeanigCount property árul el. Mivel egy szónak több jelentése is lehet, ezért van szükség a kettős ciklusra: először végigmegyünk az összes jelentésen, majd minden jelentésnél kiolvassuk a szinonimákat.
        Array ml = (Array)si.MeaningList;
        for (int i=1; i<si.MeaningCount; i++)
        {
A második ciklus előtt lekérjük a SynonymInfo objektum adott csoportjának tömbjét, melynek minden egyes eleme egy-egy szinonimát tárol szövegként.
          object o = i;
          Array sl = (Array)si.get_SynonymList(ref o);
Most jöhet a második ciklus mely végigmegy az adott szó adott jelentéséhez tartozó szinonimákon.
          listBox1.Items.Add(i.ToString()+". jelentése: "+ml.GetValue(i)+"; szinonimái:");
          for (int j=1; j<sl.Length; j++)
          {
            listBox1.Items.Add("\t"+sl.GetValue(j));
          }
        }
      }
Végül zárjuk a dokumentumot és a Word-öt.
      wa.ActiveDocument.Close(ref m, ref m, ref m);
      wa.Quit(ref m, ref m, ref m);
    }