起因

自从小猪使用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. ZOJ-2365 Strong Defence 无公共边割边集

    题意:该题的题意晦涩,勉勉强强听别人说了一遍后再读了一遍题才算懂了题意,题图说的是A国因为B国药进攻自己的国家,于是想办法在联通A-B之间的路径上进行阻击.阻击的舰船停留在一个路径上,舰船上都要放置水 ...

  2. MyEclipse中文乱码解决方法

    在Myeclipse导入一个项目,有中文乱码问题,解决方法如下: 一.将整个project设置编码UTF-8(UTF-8可以最大的支持国际化) windows->Preferences-> ...

  3. MIRO发票校验BAPI_INCOMINGINVOICE_CREATE (2013-01-23 10:01:29)

    form frm_invoice_create2 .  data: str type string.  data: ls_headerdata       like bapi_incinv_creat ...

  4. hibernate对象关系实现(二)一对一

    双向一对一以部门和经理为例: a.部门和经理类中各自由对方的引用:(省略了get/set方法) b.数据库两种方式实现:一种(b.1)是外键映射,并将外键添加唯一约束(至于哪个对象的主键做外键,可随意 ...

  5. 刻录DVD_目录

    1.down.52pojie.cn (20160701) (1 in 5) 工具 2.down.52pojie.cn (20160701) (2 in 5) Android VM 6/7 3.down ...

  6. caffe的db_lmdb.hpp文件

    先总的说一下: 类:LMDBCursor:  它干了点什么?它需要传入参数为:mdb_txn(传入它是因为用完它,把它absort掉), mdb_cursor;它应该是用来读出数据的: 类:LMDBT ...

  7. C++——友元、异常和其他

    一.友元 类并非只能拥有友元函数,也可以将类作为友元.在这种情况下,友元类的所有方法都可以访问原始类的私有成员和保护成员.另外,也可以做更严格的限制,只将特定的成员函数指定为另一个类的友元.哪些函数. ...

  8. Android是如何绘制View的

    当一个activity获得焦点时, 它会被要求绘制它的布局. Android框架将处理绘制的过程, 但是activity必须提供它的布局体系的根节点. 绘制将从根节点开始, 根节点被要求测量和绘制布局 ...

  9. HA功能中ZKFC对NN状态的控制

    ZKFC : zookeeper FailoverController NN : name node Hadoop 2.0 HA架构图: FC是要和NN一一对应的,两个NN就要部署两个FC.它负责监控 ...

  10. android fragment 博客 学习记录

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37992017 上篇博客中已经介绍了Fragment产生原因,以及一些基本的用法和 ...