Hi,
Mit automation kann man andere Programme, die COM unterstützen (z.B. MS Office), steuern. Da Automation nicht viel mit .net zu tun hat (sondern mit COM), kann es da aber auch einige Probleme geben. Programme, die sich per Automation steuern lassen, müssen eine Klassenbibliotek zur Verfügung stellen, über die sich das Programm dann steuern lassen kann. Man muss, um die Klassenbibliotek des jeweiligen Programms nutzen zu können, vorher einen Verweis darauf im eigenen Programm plazieren (für Word: Microsoft Word x.x Object Library).
Von der Entwicklungsumgebung wird dann eine sog. Wrapperbibliotek angelegt, die eine Schnittstelle zwischen .net und COM darsellt (z.B. Microsoft.Office.Interopt.Word). Mit den Wrappern kann man dann teoretisch so wie mit .net Klassen umgehen (es sind ja .net Klassen). (Hinweis: Fur Office XP und 2003 stellt MS sog. Primary Interopt Assemblies bereit, die in der GAC installiert werden und echte .net Objekte sind).
Achtung: in der Praxis kann es Probleme geben, weil C# keine optionale Parameter kennt. Daher muss für jeden nicht genutzten Parameter System.Reflection.Missing übergeben werden.Beispiel, wie man einen Text in Word anzeigt:
Word._Application wA;
Word._Document wD
private void ShowInWord()
{
object omissing = System.Reflection.Missing.Value;
wA = new Word.ApplicationClass();
wA.Visible = true;
wD = wA.Documents.Add(ref omissing, ref omissing, ref omissing, ref omissing);
wD.Application.Selection.Paste();
wD.ActiveWindow.ActivePane.View.Type = Word.WdView.wdPrintView;
wD.ActiveWindow.ActivePane.View.SeekView = Word.WdSeekView.wdwdSeekCurrentPageHeader;
wD.Application.Selection.Text = "Gedruckt aus C#";
wD.ActiveWindow.ActivePane.View.SeekView = Word.WdSeekView.wdSeekMainDocument;
}
Beachte: bei dem Beispiel muss der einzufügende Text in der Zwischenablage sein.