幾個月前看過Channel9上的一個視頻,Windows Live Writer的開發經理Charles Teague現場講述如何開發Writer外掛程式。昨天又看了徐曉卓同學的WebCast,感覺內容雷同,看完之後覺得食不盡興,並且在一些細節地方我對該同學有異議。其實我與徐曉卓同學素未謀面,更談不上江湖過節,只不過是想綜合他和Charles的內容,總結歸檔,給其他想要涉足Live Writer外掛程式開發的同學一點兒入門級參考資料罷了。我希望曉卓同學看了我的文章不要生氣,我不是說你代碼寫錯了,只是有一個比較明顯的地方,你既然在MSDN WebCast上寫代碼,我覺得還是有必要遵守微軟的編碼規範,例如局部變數的聲明,首字母應該小寫,雖然你大寫了並不影響編譯。總而言之,我不提倡文人相酸,只奉行共同進步。
言歸正傳,這篇文章裡的代碼量不大,但整個Solution我已經放到CodePlex上去了,大家可以直接到http://www.codeplex.com/WriterPlugin查看或下載所有原始碼。
微軟已經發布了Windows Live Writer SDK,其中主要分為三個部分:
- Application API
- 用於啟動Live Writer應用程式以及編輯現有資料類型,例如:超連結、文本、圖片等;
- Content Source Plugin API
- Provider Customization API
本文主要講述Application API的開發練習,我相信大家只要明白了如何利用Application API做自己想要做的事情,那麼其它兩個API也就觸類旁通了。
簡單介紹一下應用情境:可能因為也許需要,某些人需要往Live Writer中插入一些常值內容,並且這些常值內容在插入的時候總是需要經過固定的處理流程,類似於給圖片加浮水印一樣,因此簡單的複製粘貼就顯得不夠用了,需要我們另外給他開發一個獨立的應用程式來做處理工作嗎?那我寫這篇文章做啥!
首先開啟Visual Studio 2008,建立一個Class Library類型的項目,建立好了以後要添加Application API的動態連結程式庫檔案的引用,不用到MSDN上去下載,安裝了Live Writer之後即可在安裝目錄下找到這個WindowsLive.Writer.Api.dll檔案。然後如果你的外掛程式需要開啟Windows視窗,那麼還需要添加System.Windows.Forms等引用。
根據我們假想情境的業務需要,我們需要有一個Windows視窗,用於接收使用者需要插入的原始常值內容,然後進行處理,也就是將字串變成大寫並在後面添加Autumoon Lab的標記。需要注意的是,我們往Live Writer中插入常值內容時要切記應該使用HTML標籤,而不是C#的一些逸出字元,例如要用"<br/>"而不是"\n"等。
代碼將如何按照我們的想法來工作呢?我們首先聲明一個類AutumoonPlugin,繼承ContentSource類,並且重載其中的CreateContent用於實現我們自己的文本插入流程:
1: [WriterPlugin("7c371eef-e350-4aae-af28-91613a9137e3", "Autumoon", PublisherUrl = "http://www.Autumoon.com", Description = "This is an Autumoon Lab plugin.", Name = "Autumoon")]
2: [InsertableContentSource("iAutumoon", SidebarText = "iAutumoon")]
3: public class AutumoonPlugin : ContentSource
4: {
5: public override DialogResult CreateContent(IWin32Window dialogOwner, ref string content)
6: {
7: new ProcessForm().ShowDialog();
8:
9: content = ContentProcessor.ProcessedContent;
10:
11: return (!String.IsNullOrEmpty(content) ? DialogResult.OK : DialogResult.No);
12: }
13: }
需要給這個類添加兩個特性:WriterPlugin和InsertableContentSource。並設定其中屬性的值。根據屬性名稱大家就可以明白是什麼意思,我就不再贅述了,強調一點,WriterPlugin第一個參數是id值,大家可以自行設定,我只是用了一個Guid值而已,不要被迷惑了。
根據上面幾行代碼大家就可以看出來我們的流程:開啟視窗接受使用者的插入內容;從一個固定的地方去擷取處理之後的文本,然後通過DialogResult.OK來告訴Live Writer插入content,這下明白content為啥是ref的了吧。
我們的插入視窗其實一點兒也不華麗,但是卻很實用。另外,我們還有一個工具類來專門進行內容處理:
1: public static void Process(string originalContent)
2: {
3: ProcessedContent = (!String.IsNullOrEmpty(originalContent)
4: ? String.Format("<p>{0}<br/><hr>-- Insert by <b>Autumoon Lab</b>.</p>", originalContent.ToUpper())
5: : String.Empty);
6: }
這個方法對使用者需要插入的文本進行了簡單地處理,大家只要掌握了Live Writer外掛程式的開發方式,就可以天馬行空,自由發揮了。
然後我們編譯代碼,再將編譯後的dll檔案拷貝到Windows Live Writer安裝目錄下的Plugins檔案夾裡,然後開啟運行Live Writer就可以看到側邊欄裡已經有我們建立的外掛程式了。
我衷心希望接下來不久的時間就可以看到有更多的同學開發出更多更好更強大的Live Writer外掛程式,看到更多更好更精闢的技術文章!