几个月前看过Channel9上的一个视频,Windows Live Writer的开发经理Charles Teague现场讲述如何开发Writer插件。昨天又看了徐晓卓同学的WebCast,感觉内容雷同,看完之后觉得食不尽兴,并且在一些细节地方我对该 同学有异议。其实我与徐晓卓同学素未谋面,更谈不上江湖过节,只不过是想综合他和Charles的内容,总结归档,给其他想要涉足Live Writer插件开发的同学一点儿入门级参考资料罢了。我希望晓卓同学看了我的文章不要生气,我不是说你代码写错了,只是有一个比较明显的地方,你既然在 MSDN WebCast上写代码,我觉得还是有必要遵守微软的编码规范,例如局部变量的声明,首字母应该小写,虽然你大写了并不影响编译。总而言之,我不提倡文人 相酸,只奉行共同进步。
言归正传,这篇文章里的代码量不大,但整个Solution我已经放到CodePlex上去了,大家可以直接到http://www.codeplex.com/WriterPlugin查看或下载所有源代码。
微软已经发布了Windows Live Writer SDK,其中主要分为三个部分:
- Application API
- 用于启动Live Writer应用程序以及编辑现有数据类型,例如:超链接、文本、图片等;
- Content Source Plugin API
- 用于扩展新数据类型的支持能力;
- Provider Customization API
- 用于自定义现有功能以及增添新的功能;
本文主要讲述Application API的开发练习,我相信大家只要明白了如何利用Application API做自己想要做的事情,那么其它两个API也就触类旁通了。
简单介绍一下应用场景:可能因为也许需要,某些人需要往Live Writer中插入一些文本内容,并且这些文本内容在插入的时候总是需要经过固定的处理流程,类似于给图片加水印一样,因此简单的复制粘贴就显得不够用 了,需要我们另外给他开发一个独立的应用程序来做处理工作吗?那我写这篇文章做啥!
首先打开Visual Studio 2008,新建一个Class Library类型的项目,创建好了以后要添加Application API的动态链接库文件的引用,不用到MSDN上去下载,安装了Live Writer之后即可在安装目录下找到这个WindowsLive.Writer.Api.dll文件。然后如果你的插件需要打开Windows窗口,那 么还需要添加System.Windows.Forms等引用。
根据我们假想场景的业务需要,我们需要有一个Windows窗口,用于接收用户需要插入的原始文本内容,然后进行处 理,也就是将字符串变成大写并在后面添加Autumoon Lab的标记。需要注意的是,我们往Live Writer中插入文本内容时要切记应该使用HTML标签,而不是C#的一些转义字符,例如要用"<br/>"而不是"\n"等。
代码将如何按照我们的想法来工作呢?我们首先声明一个类AutumoonPlugin,继承ContentSource类,并且重载其中的CreateContent用于实现我们自己的文本插入流程:
1: [WriterPlugin("7c371eef-e350-4aae-af28-91613a9137e3", "Autumoon", PublisherUrl = "http://www.Autumoon.com", Description = "This is an Autumoon Lab plugin.", Name = "Autumoon")]
2: [InsertableContentSource("iAutumoon", SidebarText = "iAutumoon")]
3: public class AutumoonPlugin : ContentSource
4: {
5: public override DialogResult CreateContent(IWin32Window dialogOwner, ref string content)
6: {
7: new ProcessForm().ShowDialog();
8:
9: content = ContentProcessor.ProcessedContent;
10:
11: return DialogResult.OK;
12: }
13: }
需要给这个类添加两个特性:WriterPlugin和InsertableContentSource。并设置其 中属性的值。根据属性名大家就可以明白是什么意思,我就不再赘述了,强调一点,WriterPlugin第一个参数是id值,大家可以自行设置,我只是用 了一个Guid值而已,不要被迷惑了。
根据上面几行代码大家就可以看出来我们的流程:打开窗口接受用户的插入内容;从一个固定的地方去获取处理之后的文本,然后通过DialogResult.OK来告诉Live Writer插入content,这下明白content为啥是ref的了吧。
我们的插入窗口其实一点儿也不华丽,但是却很实用。另外,我们还有一个工具类来专门进行内容处理:
1: public static void Process(string originalContent)
2: {
3: ProcessedContent = (!String.IsNullOrEmpty(originalContent)
4: ? String.Format("<p>{0}<br/><hr>-- Insert by <b>Autumoon Lab</b>.</p>", originalContent.ToUpper())
5: : String.Empty);
6: }
这个方法对用户需要插入的文本进行了简单地处理,大家只要掌握了Live Writer插件的开发方式,就可以天马行空,自由发挥了。
然后我们编译代码,再将编译后的dll文件拷贝到Windows Live Writer安装目录下的Plugins文件夹里,然后打开运行Live Writer就可以看到侧边栏里已经有我们创建的插件了。
我衷心希望接下来不久的时间就可以看到有更多的同学开发出更多更好更强大的Live Writer插件,看到更多更好更精辟的技术文章!