[Tool] Open Live Writer插件開發


一 前言

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 特性表示在插入部分顯示的一些文本信息。

QQ截圖20160322233746

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 安裝目錄下,如下圖所示:

image

通過 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 進行插件調試。

image

剩下的就要靠自己自由發揮了,下一篇介紹在插件中封裝博客園的 SyntaxHighlighter 高亮代碼功能。

五 資源


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM