起因

自从小猪使用Windows Live Writer(wlw)来写博客之后就很少打开网站的后台编辑器了,这真是个写博客的好东西啊,但是任何东西都是不完美的。索契冬奥会开幕式都会把五环弄成四环呢!对于写博一个很简单的情景:小猪需要从别的网站上面引用一段话,我希望引用的这端话有独立的标签好定义其样式,就这么个简单的需求在原生的wlw里面却束手无策了。好在现在的软件都强调对其自身的拓展,wlw也不例外。

准备

其实需求很简单,就是希望能有那么个按钮,这个按钮的功能是给我的文字加上一段固定的标签就可以了。参考很多的代码高亮插件之后发现这个完全是可行的,而且相比于代码高亮来说实在是再简单不过了——我不需要针对每个关键字设置不同的标签样式,也就是我不需要解析插入的内容直接贴上去就好了。

有了上述思想准备后小猪就开始了自己的插件开发

第一步:创建类库项目

使用VS来创建类库项目:需要注意的是.NET的版本一定要是3.0以下(包括)的。小猪做的时候就在这上面浪费了很长的时间。

第二步:对官方API库的引用

库在哪里?不需要去下载,只要电脑上安装了wlw,这个库就静静的躺在你的电脑里wlw的安装文件目录下,例如:C:\Program Files (x86)\Windows Live\Writer\System.Windows.Forms.dll。当然因为需要新建一个输入代码的窗口,所以需要对System.Windows.Forms库的引用。

第三步:设置生成路径

因为我们很多时候需要实时预览我们的插件,避免每次编译好了都自己安装的麻烦我们设置生成路径,让VS编译的时候直接帮我们生成的DLL文件放到指定的文件夹下。

打开项目属性设置生成事件,在“后期生成事件命令行:”一栏中输入:XCOPY /D /Y /R "$(TargetPath)" "C:\Program Files (x86)\Windows Live\Writer\Plugins\"。保存并退出!

第四步:编写自己的类实现ContentSource类的方法

[WriterPlugin("72371eef-e350-4aae-af28-91613a9137e3", "smallerpig",
PublisherUrl = "http://www.smallerpig.com",
Description = "This is an Test plugin.", Name = "smallerpigPlugin")]
[InsertableContentSource("smallerpigPlugin", SidebarText = "smallerpigPlugin")]
public class smallerpigPlugin : ContentSource
{
public override DialogResult CreateContent(IWin32Window dialogOwner, ref string content)
{
new AddFrom().ShowDialog();
content = ContentProcessor.ProcessedContent;
return (!String.IsNullOrEmpty(content) ? DialogResult.OK : DialogResult.No);
}
}
  1. 第一个参数为一个Guid,我们可以用Visual Studio自动生成,其标识的作用。
  2. 第二个参数为该插件的名称,将在Windows Live Writer的插件管理器中看到。
  3. PublisherUrl为发布者的网站地址,这里就写了我的Blog地址。
  4. ImagePath为插件的图标文件路径,注意该图标应为18*16大小,且一定以Embedded Resource形式编译在程序集中。
  5. Description为插件的一小段描述介绍。

第五步:新建窗口

因为需要在点击插件按钮时弹出对话框让用户输入对应内容,所以新建一个Form窗体拖上两个控件写上事件

public partial class AddFrom : Form
{
public AddFrom()
{
InitializeComponent();
} /// <summary>
/// End the process.
/// </summary>
private void EndProcess()
{
this.Close();
} private void Btn_Ok_Click(object sender, EventArgs e)
{
ContentProcessor.Process(this.Txt_From.Text, this.contentTextBox.Text); this.EndProcess();
} private void Btn_Cancle_Click(object sender, EventArgs e)
{
this.EndProcess();
} private void contentTextBox_TextChanged(object sender, EventArgs e)
{
}
}

再新建一个类来单独处理加标签的逻辑

public class ContentProcessor
{
/// <summary>
/// The processed content.
/// </summary>
public static string ProcessedContent { get; private set; } /// <summary>
/// The process function.
/// </summary>
/// <param name="originalContent">Original content which needs to be processed.</param>
public static void Process(string originalFrom,string originalContent)
{
ProcessedContent = (!String.IsNullOrEmpty(originalContent)
? String.Format("<fieldset><legend><a href=\"{0}\">引用:</a></legend><div style=\"padding:5px 10px;color:#666666;text-align: justify;\">{1}</div></fieldset>", originalFrom, originalContent)
: String.Empty);
}
}

这个时候这个简单控件的完整代码就已经完成。编译后重新打开wlw就可以在插件栏里发现它。

参考:http://www.cnblogs.com/dflying/archive/2006/12/03/580602.html

http://www.cnblogs.com/yjf512/archive/2012/05/13/2498400.html

后记

小猪写完这个简单的插件之后发现wlw不仅仅可以这么用,我们自己写的新闻发布页、博客等等程序其实都可以使用wlw来发布,如果需要一定自定义的格式或者要求我们完全可以使用插件来完成。这样我们就不需要在网页端使用富文本编辑器来编辑发布。有时间小猪好好研究研究者块内容。如果发现这个思路确实可行的话那么以后可以在项目中实施。

编写自己的Windows Live Writer插件的更多相关文章

  1. 学习编写Windows Live Writer插件

    1.参考链接 参考:http://www.cnblogs.com/liulun/archive/2009/05/27/1491116.html Live Writer API参考:http://msd ...

  2. windows live writer插件说明文档(附录网盘地址)

    百度云地址:http://pan.baidu.com/s/1hqnjzjY 1.Screen Capture tool 用于直接在WLWriter中进行截图的一个插件,要配合SnagIt 这个软件使用 ...

  3. 如何安装Windows Live Writer插件

    Windows Live Writer 是一个强大的离线博客编辑工具,通过它可以离线编辑内容丰富的博文.它不但支持微软的live space,还支持诸如Wordpress 这样的开源博客系统. Win ...

  4. 一次查找Windows Live Writer的VSPaste插件丢失RTF格式信息的经历

    背景 我在博客园上写博客是使用Windows Live Writer,代码高亮插件是使用Paste from Visual Studio(下文简称VSPaste). Windows Live Writ ...

  5. Windows Live Writer介绍及相关问题解决

    今天本来想说更新一篇我的文章,更新的过程中添加了很多的内容,里面的图片太多了,导致我浏览器占用的内存不断增大,浏览器变得很卡,最后过了好久我终于更新完文章打算保存的时候居然卡住,然后所有我更新的文字和 ...

  6. Windows Live Writer代码插件整理

    以下code插件命名按照 Windows Live Writer 中显示的插件名 1.Source code plug-in(cnblogs官方推荐) 界面: 效果: /** * Returns th ...

  7. Windows Live Writer离线编写博客

    WLW最新版本为2012,官网下载 Windows Live Writer配置步骤 使用Windows Live Writer 2012和Office Word 2013 发布文章到博客园全面总结 L ...

  8. Windows Live Writer编写Octopress

    Windows live Writer是一个可以用来离线编写,并发布博客的工具. Octopress是一个静态博客生成系统.使用群体多是geek,主要有显示代码清晰,git同步,并且不用购买空间的特点 ...

  9. Windows Live Writer的Markdown插件MarkdownInLiveWriter支持语法高亮了

    我前几天开发的Windows Live Writer的Markdown的插件MarkdownInLiveWriter支持语法高亮了.参见下图: 基本上就是把我的另一个插件CodeInLiveWrite ...

随机推荐

  1. 学习笔记day6:CSS3动画属性

    总结: 1: CSS动画:@keyframes  animation:ie10+:加-webkit前缀: animation 则是属于关键帧动画的范畴; 它本身被用来替代一些纯粹表现的javascri ...

  2. mysql help

    1.一般情况,不知道命令的使用方法,有三种办法: a. --help 是命令的一个选项,介绍命令的使用方法.mysql --help 或者mysql -? b. man 对命令的详细解释,man my ...

  3. Mysql 系统参数 系统变量 状态变量

    1.系统参数,也就是命令行选项,执行命令的时候,后面跟的参数,系统参数很多,不可能每次执行程序的时候,指定这些参数.这些参数写在配置文件(Windows下是my.ini,Linux是my.cnf),执 ...

  4. Android 高手进阶之自定义View,自定义属性(带进度的圆形进度条)

      Android 高手进阶(21)  版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请注明地址:http://blog.csdn.net/xiaanming/article/detail ...

  5. D3.js 完整的柱形图

    一个完整的柱形图包含三部分:矩形.文字.坐标轴.制作一个实用的柱形图,内容包括:选择集.数据绑定.比例尺.坐标轴等内容. 1. 添加 SVG 画布 //画布大小 var width = 400; va ...

  6. Jq_选择器、效果函数

    JQuery 选择器 选择器                     实例                                   选取 *                         ...

  7. 激活MyEclipse 6.5方法-通过一段Java程序生成激活码

    在MyEclipse中新建一个Java类,名为MyEclipseKeyGen,将下面的Java代码拷贝到MyEclipseKeyGen类中,先修改变量subscriber的值,然后运行程序即可获得Su ...

  8. 推荐两篇Unity与Android交互的文章

    http://www.xuanyusong.com/archives/676 里面18,19介绍

  9. 第二章 Python基本元素:数字、字符串和变量

    Python有哪些内置的数据类型: True False #布尔型 42 100000000 #整型 3.14159 1.0e8 #浮点型 abcdes #字符串 2.1 变量.名字和对象 pytho ...

  10. 无法找到脚本*.VBS的脚本引擎解决办法

    当你在运行一些基于VBS脚本语言的文件时,系统可能报错.这时候可能是你的VBS脚本服务在注册表中出错了,原因可能是卸载或安装一些代码不规范的程序引起的.这里给出无法找到脚本引擎"vbscri ...