一 前言

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 的继承扩展类,由此作为插件的入口。下面根据示例代码简单讲解一下。

 /// <summary>
 /// 插件描述属性设置
 /// WriterPlugin(string id, string name,
 /// 属性:
 /// [Description = string],
 /// [HasEditableOptions = bool],
 /// [Id = string],
 /// [ImagePath = string],
 /// [Name = string],
 /// [PublisherUrl = string]
 /// </summary>
 [WriterPlugin(
     "4d558c25-8a1d-4441-a68f-7cd40c35c514",
     "插件名称",
     Description = "插件描述",
     HasEditableOptions = true,
     ImagePath = "插件图标",
     PublisherUrl = "插件发布URL")]
 [InsertableContentSource("Source Code")]
 public class ContentSource扩展类 : ContentSource
 {
     ...
 }

继承 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 高亮代码功能。

五 资源

[Tool] Open Live Writer插件开发的更多相关文章

  1. 新语言代码高亮及Windows Live Writer插件开发

    最近在博客园做一些学习笔记.一个是看apple的swift官方书,另外一个是随学校课堂(SICP)学习scheme. 这两种语言都谈不上普及(或者说swift太新).博客园原来的windows liv ...

  2. [Tool] Open Live Writer 插件更新

    最新插件下载地址:Memento.OLW_V1.0.0.2.7z 零.历史更新记录 2016.11.24 1. 修正 cnblog 语法高亮中的 SQL.Perl 语法高亮异常 下载地址:Mement ...

  3. jQuery插件开发精品教程,让你的jQuery提升一个台阶

    要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈 ...

  4. jquery插件开发继承了jQuery高级编程思路

    要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈 ...

  5. RFID 读写器 Reader Writer Cloner

    RFID读写器的工作原理 RFID的数据采集以读写器为主导,RFID读写器是一种通过无线通信,实现对标签识别和内存数据的读出和写入操作的装置. 读写器又称为阅读器或读头(Reader).查询器(Int ...

  6. 使用Windows Live Writer发布日志

    前言 Windows Live Writer是非常不错的一个日志发布工具,支持本地写文章,然后通过点击一个按钮就发布到网站上,如果借助插件,还可以同时发布到多个博客网站,功能非常强大,很多博友认识她之 ...

  7. jquery学习笔记---jquery插件开发

    http://www.cnblogs.com/Wayou/p/jquery_plugin_tutorial.html jquery插件开发:http://www.cnblogs.com/damonla ...

  8. 编写自己的Windows Live Writer插件

    起因 自从小猪使用Windows Live Writer(wlw)来写博客之后就很少打开网站的后台编辑器了,这真是个写博客的好东西啊,但是任何东西都是不完美的.索契冬奥会开幕式都会把五环弄成四环呢!对 ...

  9. How to Write Doc Comments for the Javadoc Tool

    http://www.oracle.com/technetwork/java/javase/documentation/index-137868.html This document describe ...

随机推荐

  1. redis数据类型之—Hash

    (1)hash 简单介绍 hash类型适合存储对象,字段值只能是字符串,不支持其他数据类型. (2)hash 常用命令 // 增加hash属性值 > hset user: name zm (in ...

  2. {POJ}{3988}{Software Industry Revolution}{DP好题}

    题意:给定一个字符串d,要求用另一字符串s去匹配,其中s中的?可以为任何字符,*可以为任意个字符,求最小的匹配权值 思路:这题和CSDN英雄会的“反相互”类似,由于其中某些字符的不确定性,利用动态规划 ...

  3. Linux内核分析之理解进程调度时机跟踪分析进程调度与进程切换的过程

    一.原理分析 1.调度时机 背景不同类型的进程有不同的调度需求第一种分类I/O-bond:频繁的进行I/O:通常会花费很多时间等待I/O操作的完成CPU-bound:计算密集型:需要大量的CPU时间进 ...

  4. ionic介绍

    ionic介绍 Ionic是一个前端的框架,帮助开发者使用HTML5, CSS3和JavaScript做出原生应用. The beautiful, open source front-end fram ...

  5. f2fs解析(七)node管理器中的 free_nid 结构体

    除了node_info之外, node管理器中还有还有个重要的数据结构: struct free_nid { struct list_head list; /* for free node id li ...

  6. ASP.NET中进行消息处理(MSMQ) 一

    MSMQ是微软消息队列的英文缩写.那么什么是消息队列?这些介绍网上一大片这里就不多说了.本文对于大虾级的人物来说这只是小玩意而已,对于初学者来说这文章还是有一定的帮助,希望路过的大虾们别笑话我班门弄斧 ...

  7. 关于服务器响应,浏览器请求的理解以及javaWeb项目的编码问题

    1.服务器(Server)响应,浏览器(Brower)请求: 对于B/S的软件,数据的传递体现在,用户利用浏览器请求,以获得服务器响应.在JavaWeb项目中,大致包含.java文件的数据处理模块,和 ...

  8. iOS开发之--UITextField属性

    UITextField属性 0.     enablesReturnKeyAutomatically 默认为No,如果设置为Yes,文本框中没有输入任何字符的话,右下角的返回按钮是disabled的. ...

  9. Effective C++ 4.设计与声明

    //条款18:让接口容易被正确使用,不易被误用 // 1.如果客户企图使用某个接口而却没有获得他所预期的行为,那么这个代码就不该通过编译. // 2.促进正确使用的方法包括接口的一致性,以及与内置类型 ...

  10. UserDefault 用户首选项读写 swift

    // // ViewController.swift // 首选项数据读写 // // Created by mac on 15/7/12. // Copyright (c) 2015年 fangyu ...