编写自己的Windows Live Writer插件
起因
自从小猪使用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);
}
}
- 第一个参数为一个Guid,我们可以用Visual Studio自动生成,其标识的作用。
- 第二个参数为该插件的名称,将在Windows Live Writer的插件管理器中看到。
- PublisherUrl为发布者的网站地址,这里就写了我的Blog地址。
- ImagePath为插件的图标文件路径,注意该图标应为18*16大小,且一定以Embedded Resource形式编译在程序集中。
- 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插件的更多相关文章
- 学习编写Windows Live Writer插件
1.参考链接 参考:http://www.cnblogs.com/liulun/archive/2009/05/27/1491116.html Live Writer API参考:http://msd ...
- windows live writer插件说明文档(附录网盘地址)
百度云地址:http://pan.baidu.com/s/1hqnjzjY 1.Screen Capture tool 用于直接在WLWriter中进行截图的一个插件,要配合SnagIt 这个软件使用 ...
- 如何安装Windows Live Writer插件
Windows Live Writer 是一个强大的离线博客编辑工具,通过它可以离线编辑内容丰富的博文.它不但支持微软的live space,还支持诸如Wordpress 这样的开源博客系统. Win ...
- 一次查找Windows Live Writer的VSPaste插件丢失RTF格式信息的经历
背景 我在博客园上写博客是使用Windows Live Writer,代码高亮插件是使用Paste from Visual Studio(下文简称VSPaste). Windows Live Writ ...
- Windows Live Writer介绍及相关问题解决
今天本来想说更新一篇我的文章,更新的过程中添加了很多的内容,里面的图片太多了,导致我浏览器占用的内存不断增大,浏览器变得很卡,最后过了好久我终于更新完文章打算保存的时候居然卡住,然后所有我更新的文字和 ...
- Windows Live Writer代码插件整理
以下code插件命名按照 Windows Live Writer 中显示的插件名 1.Source code plug-in(cnblogs官方推荐) 界面: 效果: /** * Returns th ...
- Windows Live Writer离线编写博客
WLW最新版本为2012,官网下载 Windows Live Writer配置步骤 使用Windows Live Writer 2012和Office Word 2013 发布文章到博客园全面总结 L ...
- Windows Live Writer编写Octopress
Windows live Writer是一个可以用来离线编写,并发布博客的工具. Octopress是一个静态博客生成系统.使用群体多是geek,主要有显示代码清晰,git同步,并且不用购买空间的特点 ...
- Windows Live Writer的Markdown插件MarkdownInLiveWriter支持语法高亮了
我前几天开发的Windows Live Writer的Markdown的插件MarkdownInLiveWriter支持语法高亮了.参见下图: 基本上就是把我的另一个插件CodeInLiveWrite ...
随机推荐
- ZOJ-2365 Strong Defence 无公共边割边集
题意:该题的题意晦涩,勉勉强强听别人说了一遍后再读了一遍题才算懂了题意,题图说的是A国因为B国药进攻自己的国家,于是想办法在联通A-B之间的路径上进行阻击.阻击的舰船停留在一个路径上,舰船上都要放置水 ...
- MyEclipse中文乱码解决方法
在Myeclipse导入一个项目,有中文乱码问题,解决方法如下: 一.将整个project设置编码UTF-8(UTF-8可以最大的支持国际化) windows->Preferences-> ...
- 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 ...
- hibernate对象关系实现(二)一对一
双向一对一以部门和经理为例: a.部门和经理类中各自由对方的引用:(省略了get/set方法) b.数据库两种方式实现:一种(b.1)是外键映射,并将外键添加唯一约束(至于哪个对象的主键做外键,可随意 ...
- 刻录DVD_目录
1.down.52pojie.cn (20160701) (1 in 5) 工具 2.down.52pojie.cn (20160701) (2 in 5) Android VM 6/7 3.down ...
- caffe的db_lmdb.hpp文件
先总的说一下: 类:LMDBCursor: 它干了点什么?它需要传入参数为:mdb_txn(传入它是因为用完它,把它absort掉), mdb_cursor;它应该是用来读出数据的: 类:LMDBT ...
- C++——友元、异常和其他
一.友元 类并非只能拥有友元函数,也可以将类作为友元.在这种情况下,友元类的所有方法都可以访问原始类的私有成员和保护成员.另外,也可以做更严格的限制,只将特定的成员函数指定为另一个类的友元.哪些函数. ...
- Android是如何绘制View的
当一个activity获得焦点时, 它会被要求绘制它的布局. Android框架将处理绘制的过程, 但是activity必须提供它的布局体系的根节点. 绘制将从根节点开始, 根节点被要求测量和绘制布局 ...
- HA功能中ZKFC对NN状态的控制
ZKFC : zookeeper FailoverController NN : name node Hadoop 2.0 HA架构图: FC是要和NN一一对应的,两个NN就要部署两个FC.它负责监控 ...
- android fragment 博客 学习记录
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37992017 上篇博客中已经介绍了Fragment产生原因,以及一些基本的用法和 ...