一 前言
Windows Live Writer(簡稱 WLW)開源之后變成 Open Live Writer(簡稱 OLW),原先 WLW 的插件在 OLW 下都不能用了,原因很簡單,WLW 插件開發是基於 WindowsLive.Writer.Api.dll 組件,而 OLW 的插件則是基於 OpenLiveWriter.Api.dll,命名空間都不一樣了,自然是不可能直接拿過來用的。不過對於插件開發而言,換一個 dll,換一個命名空間,其他差不多都保持不變。
對於 WLW 的插件開發,可以參考之前 仿博客園插入代碼 和 插入折疊區域功能 兩篇文章,今天這里則是要將之前 WLW 下的工程修改成 OLW 使用的插件。
其中:
WLW 下載地址:http://windows.microsoft.com/en-us/windows/essentials;
OLW 下載地址:http://openlivewriter.org/ Github:https://github.com/OpenLiveWriter
二 正文
如果你想要自己開發一個 OLW 插件,怎么辦呢?
1. 新建一個 Windows 類庫工程;
2. 在“程序包管理器控制台”中,也就是通過 NuGet 執行“Install-Package OpenLiveWriter.SDK -Pre”命令,導入上面提到的 OpenLiveWriter.Api.dll。
當然了,你也可以在安裝完 Open Live Writer 之后,從 C:\Users\用戶文件夾\AppData\Local\OpenLiveWriter\app-0.6.0.0 里面尋找到該 dll 組件,手動在項目引用處添加該 dll 引用,也是可以的。
3. 最重要的是要實現 OpenLiveWriter.Api.ContentSource 的繼承擴展類,由此作為插件的入口。下面根據示例代碼簡單講解一下。
1 /// <summary> 2 /// 插件描述屬性設置 3 /// WriterPlugin(string id, string name, 4 /// 屬性: 5 /// [Description = string], 6 /// [HasEditableOptions = bool], 7 /// [Id = string], 8 /// [ImagePath = string], 9 /// [Name = string], 10 /// [PublisherUrl = string] 11 /// </summary> 12 [WriterPlugin( 13 "4d558c25-8a1d-4441-a68f-7cd40c35c514", 14 "插件名稱", 15 Description = "插件描述", 16 HasEditableOptions = true, 17 ImagePath = "插件圖標", 18 PublisherUrl = "插件發布URL")] 19 [InsertableContentSource("Source Code")] 20 public class ContentSource擴展類 : ContentSource 21 { 22 ... 23 }
繼承 OpenLiveWriter.Api.ContentSource 的擴展類,需要設置 WriterPlugin 特性,用於描述插件的相關配置。WriterPlugin 需要兩個參數,id 和 name,id 直接取工程->屬性->程序集信息 里的 GUID 即可,也可以自己設定;name 表示插件的名稱,參考下面的圖示說明。
- 4d558c25-8a1d-4441-a68f-7cd40c35c514:id參數,對應工程的GUID;
- 插件名稱:插件名稱,用於插件顯示名稱;
- Description:插件描述信息,參考如下圖示;
- HasEditableOptions:默認為 false,表示是否顯示“Options…”設置插件屬性按鈕;
- ImagePath:插件圖標路徑,ico 圖像格式,如果 ico 圖標存放於工程目錄下 Images/code.ico,則此處表示為 Images.code.ico,也就是說需要把路徑連接符轉換成 .;
- PublisherUrl:插件發布網址鏈接,參考如下圖示;
InsertableContentSource 特性表示在插入部分顯示的一些文本信息。
3. 接下來就要重寫該類中的 CreateContent 方法了。
public virtual DialogResult CreateContent(IWin32Window dialogOwner, ref string content);
第一個參數 dialogOwner 表示當前 OLW 窗口句柄,第二個參數 content 是一個引用,表示從 OLW 中引用過來,指當前在 OLW 窗口中選中的內容,此時就可以在該方法中對該 content 內容進行處理,最后賦值返回給 content,就可以實現插件對 OLW 當前內容的封裝處理了。當然也可以在插件中對剪貼板內容進行整合處理后,再賦值給 content,作為光標位置處插入的新內容。
4. 如果想要實現上圖中右下角那個“Option”,對插件進行屬性設置,則需要重寫該類中的 EditOptions 方法了。
public virtual void EditOptions(IWin32Window dialogOwner);
三 生成
1. 如何將生成的自定義插件 dll 自動復制拷貝到 OLW 安裝目錄下呢?
可以在 工程->屬性->生成事件 里設置“后期生成事件命令行”,保證在運行后期生成事件成功時,自動將 Debug 目錄下的插件 dll 拷貝到 OLW 安裝目錄下,如下圖所示:
通過 copy 命令,可以將 $(TargetPath) 指定的dll文件,拷貝到 C:\…\AppData\Local\OpenLiveWriter\app-0.6.0.0\Plugins 文件夾下。(也可以采用網上提到的 XCOPY /D /Y /R命令進行拷貝,本人是怎么簡單怎么來,這些命令詳情可以查看 cmd,在 cmd 中輸入 help copy,就可以看到命令幫助提示)
BTW,原先的 WLW 安裝后,目錄是在 C:\Program Files (x86)\Windows Live Writer,而 OLW 安裝后是在 用戶文件夾下的隱藏文件夾 AppData 里,比如本人的就是 C:\Users\用戶文件夾\AppData\Local\OpenLiveWriter\app-0.6.0.0,而且默認該目錄下沒有 Plugins 文件夾存放插件,可以手動創建一個用於存放插件 dll。
四 調試
在編寫自定義插件過程中,調試是難免的,而該工程項目只是一個 dll 類庫,與 WLW 類似,調試也是需要依賴於 OLW 這個外部程序的。
同樣,需要在 工程->屬性->調試 中設置“啟動外部程序“,並指定到 OLW 安裝目錄下對應的 exe 應用程序文件即可,此時在 VS 項目中點擊啟動,就會自動啟用 OLW 進行插件調試。
剩下的就要靠自己自由發揮了,下一篇介紹在插件中封裝博客園的 SyntaxHighlighter 高亮代碼功能。