Lori und ich hatten ja kürzlich eine TechTalk-Tour auf der wir unter anderem verschiedene Live-Technologien und Applikationen gezeigt haben. Unter anderem ein Live Writer Plugin.
Live Writer PlugIns sind .NET Dlls. Da man in aller Regel irgendeine Art von Interaktion mit dem Benutzer planen dürfte, wähle ich hier eine Windows Forms Control Library als Startpunkt. Sie hat den Vorteil, bereits die WinForms-Libraries referenziert zu haben. Ansonsten hätte es natürlich auch die “klassische” Class Library :) getan…
Als nächstes gilt es, die Live Writer APIs einzubinden. Add Reference –> C:\Program Files\Windows Live\Writer\WindowsLive.Writer.Api.dll
Ich bin hier zunächst gestolpert, denn in meinem Programmverzeichnis existierte auch noch ein Verzeichnis namens C:\Program Files\Windows Live Writer… War wohl noch von einer alten Installation, leider aber ohne die Bibliotheken auf die ich es abgesehen hatte.
Aus der erzeugten Solution dann noch das UserControl raus- und eine neue Klasse reingenommen, Namensraum WindowsLive.Writer.API eingebunden und der Spaß kann beginnen…
class pluginClass : ContentSource { }
Die ContentSource-Klasse bietet schon alles was man für ein einfaches Plug-in benötigt, fehlen nur noch ein paar Attribute um das PlugIn von Live Writer auffindbar zu machen:
[WriterPlugin("{41AD4607-B95A-40cf-A69D-3F86D85D5081}", "WebShotPlugin")] [InsertableContentSource("Webshot")]
[WriterPlugIn] Übernimmt hier die Aufgabe, das PlugIn auffindbar zu machen. Der erste Parameter muß eine eindeutige ID sein (eine Guid bietet sich an) und der zweite ein Name unter dem das Plugin firmieren soll. Das zweite Attribut steuert um welche Art PlugIn es sich handeln soll. InsertableContentSource dient dem freien erzeugen von Inhalt, meist im Zusammenspiel mit einem angezeigten Dialog. URLContentSource kann mit einem URL-Pattern bestückt automatisch Webseiten verarbeiten die per “Blog this” auftauchen und das LiveClipboardContentSource Attribut greift Inhalte des Clipboards ab…
Jetzt fügen wir einfach mal ein Formular zur späteren Anzeige ein. Anschließend verpassen wir ihm Controls und ein paar Einstellungen.
Jetzt kommt die eigentliche Programmierarbeit. (Naja… Arbeit? Ist eigentlich sehr wenig Aufwand :-)
Zunächst überschtreiben wir die zum ContentTyp gehörige Methode. Im Falle eines InsertableContentSource-Plugins ist das die CreateContent-Methode:
public override DialogResult CreateContent(IWin32Window dialogOwner, ref string content) { }
Bei der Arbeit am Code taucht in aller Regel auch schnell der Wunsch auf, das PlugIn direkt testen zu können. Live Writer sucht seine Plugins im PlugIn Unterverzeichnis seiner Applikation. Es reicht also, die DLL dorthin zu kopieren. Um den Vorgang komfortabel zu gestalten mache ich das per Post-Build-Event… Also Klick auf “Build”>”Properties”
Und dort der Kopierbefehl eingetragen: xcopy "$(TargetPath)" "c:\program files\Windows Live\Writer\PlugIns" /Y
Damit Visual Studio kopieren DARF (in das Programme-Verzeichnis darf man nur mit Adminrechten schreiben….) müssen noch geeignete Rechte gegeben werden. Also Rechtsklick auf das PlugIns-Verzeichnis>Eigenschaften>Sicherheit>Bearbeiten
Und nun? Ganz einfach: Die in CreateContent() übergebene content-Variable einfach mit HTML-Code befüllen… :-) Gehts simpler?
Viel Spaß!