【关于WLW的简介】
WLW是Windows Live Writer的缩写。
WLW是一个可以用于本地离线发布博客的工具软件。
关于用WLW去离线发布帖子的好处,参考这里:
通过Windows Live Writer离线发布文章到WordPress站点上,同时支持固定链接,图片上传,标签,分类
【关于WLW插件】
WLW插件,其实就是一个dll类库,用于给WLW添加额外的功能。
比如我写过的,可以浏览skydrive上面的文件并插入。
目前微软官网已有很多插件可供使用:
【关于如何编写WLW插件】
1.官方参考文档
Windows Live Writer Plugin API
编写WLW插件之前,最好要花点时间,去看看官方的参考文档。
看完之后,你就会对插件内部逻辑框架,有个大概概念了,然后再结合官方介绍,看下面教程,就很容易理解了。
2.所用语言
目前我所知道的是,好像只能用C#去实现此dll类库。
下面介绍的,也就是如何通过C#,给WLW编写插件。
3.其他已有教程:
目前已知的有:
(1)[原]开发自己的Windows Live Writer插件 – 天堂露珠の技術ブログ – BlogJava
此教程是中文的,其教程解释的已经算很清楚的。
(2)Writing Plugins For Windows Live Writer – Getting Started
Writing Plugins For Windows Live Writer – Adding An Icon
Writing Plugins For Windows Live Writer – Working With Forms
此系列教程是老外写的英文的,写的很是详细,尤其是包含了一定的截图,对于最开始的没啥C#基础的我,很是受用。
【详细介绍如何用C#给WLW编写插件】
开发环境:
Visual Studio 2010:安装后,自动会安装对应的.Net Framework。
WLW:想要给Writer编写插件,想必你已经安装了对应的WLW了。
目的:
此文目的主要是,尽量以截图为主,使得即使没有太多C#等背景知识,也可以照葫芦画瓢去写一个demo版的WLW插件。而对于画完瓢后如何实现自己需要的功能,尽可能地去给出一个学习的方法,余下的事情,就是自己摸索学习的过程了,也是别人无法替代的了。
1.建立一个C#的类库项目
知其然:
打开Visual Studio 2010 –> File –> New –> Project:
Other Languages –> Visual C# –> Class Library –> Name中写上对应的wlwPluginDemo –> OK:
知其所以然:
WLW插件本质上是一个dll类库,所以给WLW写插件,本质上就是实现一个对应的dll类库而已。
实现dll类库有很多种办法,此处我原以为是用Visual Studio中的C++,结果网上找到的教程都是用C#写的,所以,此处也是以Visual Studio 2010中的C#为例进行讲解。
提示:
无论何时,更改了任何设置或源码后,记得点击Save All:
以保持最新更改的内容。
2.配置项目:设置版本,添加引用,设置调试参数
知其所以然:
右击 wlwPluginDemo –> Properties:
打开对应的项目的属性。
(1)设置.Net Framework版本为2.0
Application->Target framework中,设置为.NET Framework 2.0:
其会跳出提示:
选择Yes。
对于将.NET Framewordk,从默认的4.0版本改为2.0版本后,项目中默认添加的一些引用,就无效了,对应的会显示会黄色警告图标,所以此处要去删除对应的无效引用:
对应代码中的linq:
也要注释掉。
知其所以然:
【关于WLW所支持的.Net framework的版本】
根据官网的解释:
WLW只能识别.NET Framework的1.1或2.0版本。
实际此处测试结果是,小于4.0的.Net framework所生成的dll,都是可以被WLW识别的。
换句话说,给WLW编写插件,默认建立C#类库的所用的4.0版本的.Net Framework所生成的dll,是无法被WLW所识别的,需要改为3.5或者更低的版本才可以。
而此处设置为2.0版本,一是保证WLW可以识别,二是更低的版本,更有利于WLW即使更新了版本,也可以对此插件有更好的兼容性。
(2)设置调试相关的参数:
(1)设置外部调试所需启动的程序
知其然:
知其所以然:
正常的windows下面的窗口等程序的调试,本来是不需要设置什么外部启动程序的,因为其本身就可以自己运行,而不需要依赖其他的程序。
而此处由于是类库,C#的类库,而类库,是单独无法运行的,所以要在依赖此处对应的WLW。因此,此处需要设置对应的WLW程序。即,在调试此WLW的插件,即dll文件之前,需要先启动对应的WLW应用程序。
(2)设置调试前所要将编译出来的dll拷贝到writer的plugin目录里
知其然:
Build Events->Post-Build enent command line中添加:
XCOPY /D /Y /R "$(TargetPath)" "C:\Program Files (x86)\Windows Live\Writer\Plugins\"
其中,C:\Program Files (x86)\Windows Live\Writer\Plugins\是你的WLW安装路径下面的plugin目录的完整路径地址。
知其所以然:
我们的目的是为了调试和运行WLW的wlwPluginDemo插件,而要运行此处插件,则必须先将当前项目编译生成的dll库文件拷贝到对应的WLW的plugin目录下面去,其才可以被WLW所识别,然后我们也才能够调试。
所以,此处去设置对应的编译之后需要做的事情,即对于build来说,是属于post event,加上对应的命令行,将对应的dll文件拷贝到对应的WLW的plugin目录。
而其中的$(TargetPath),想必细心的人,会由此想到,还有其他哪些对应的变量。
对此,可以去Edit Post-build 。。。->Macros中,找到其他更多的变量:
以供需要的人自己去设置对应参数。
(3)添加项目所需的dll引用
知其然:
添加引用的的方法都是:
右击Reference->Add Reference:
(1)添加Windows Live Writer的api
打开Add Reference对话框后,点击Browser,然后选择添加Windows Live Writer安装目录下面的WindowsLive.Writer.Api.dll:
添加之后,就可以在引用中看到了WindowsLive.Writer.Api了:
(2)添加System.Windows.Forms的引用
同上,在.NET中,找到System.Windows.Forms并添加:
知其所以然:
所谓的引用,即调用对应的dll类库,而对应的dll类库中,包含了我们所需要的类,以及其下的方法,属性等值。
我们实现对应功能,往往需要调用其他一些函数,而dll类库,简单说就是函数库,所以要将他们添加进来。
比如,下面将要介绍的,要添加一些窗口等,就需要调用系统中的System.Windows.Forms的dll文件。
如果不添加此引用的话,那么如果在源码中添加
using System.Windows.Forms;
就会出现对应的missing an assembly reference的错误:
此处就是为了解决类似问题而需要添加对应所调用到的库的。
3.编写实现插件所需要的最基本的代码
此处先去将对应的默认生成的class1.cs改名为wlwPluginDemo.cs,然后系统会自动更改对应的类函数等值的。
然后添加代码,使得wlwPluginDemo.cs如下:
using System; using System.Collections.Generic; //using System.Linq; using System.Text; using WindowsLive.Writer.Api; using System.Windows.Forms; namespace wlwPluginDemo { [WriterPlugin( "1014826c-0eb4-4e55-bd15-7918a9ed9c24", // ca got from this project Property -> Application->Assembly Infomation "WLW Plugin Demo", Description = "This is crifan's WLW Plugin Demo", HasEditableOptions = false, Name = "WLW Plugin Demo", // name show in WLW -> Insert -> Plugin PublisherUrl = "https://www.crifan.com")] [InsertableContentSource("Just WlwPluginDemo")] public class wlwPluginDemo : ContentSource { // construction public wlwPluginDemo() { } public override DialogResult CreateContent(IWin32Window dialogOwner, ref string newContent) { newContent = "This is to demo WLW Plugin."; return DialogResult.OK; } } }
知其所以然:
其中,有几处需要解释的:
(1)using WindowsLive.Writer.Api;
添加此行代码,因为是下面代码是要调用或实现对应WindowsLive.Writer.Api中的函数,而这些函数,对于WLW插件来说,则是必须要实现的。
(2)using System.Windows.Forms;
加此行代码是后期如果用到对应窗口实现的话,则需要添加对应的这个引用。
(3)1014826c-0eb4-4e55-bd15-7918a9ed9c24
这个值,叫做GUID,是通过Application->Assembly Information –> GUID所找到的:
其值对于每一个单独的插件,是唯一的。看起来好像是VS为对应的程序和类库所生成的一个特定的字符串,保证其唯一性,即可用来识别不同的程序,就像每个人的身份证号码一样。
(4)WriterPlugin和InsertableContentSource
这两个属性,是必需实现的。
然后在WLW中,才能识别出来你的插件。
(5)newContent = "This is to demo WLW Plugin.";
表示将传入的newContent赋值为对应的字符串"This is to demo WLW Plugin."。
而newContent是传入参数,表示了,在WLW编辑过程中,鼠标所选中的内容。
而后来我们会看到,如果鼠标没有选中任何内容,那么此插件执行效果就是,在鼠标所在位置,添加对应的字符串了。
(6)return DialogResult.OK;
表示对话框窗口执行完毕,返回对应的结果。
3.如何调试WLW的插件
知其然:
点击对应的调试按钮,或者直接按F5:
便会启动WLW,点击插入->插件,就可以看到我们的插件“WLW Plugin Demo”了:
点击它,则会在当前的内容编辑窗口中,插入对应的字符串:
知其所以然:
可以看到,此处调试dll,就是前面所解释的,需要先运行对应的WLW,然后再点击对应的插件,就可以看到运行效果了。
而关于具体如何调试,就是很常见的,在源码中打断点,然后点击插件,则会自动在对应的源码的位置停止,然后就可以继续你的调试过程了。
【wlwPluginDemo源码下载】
上述代码,可以去这里下载:
【学习方法】
授人鱼不如授人以渔。
前面的已经介绍完了,下面开始介绍。
对于基本的插件编写方法,即“授人鱼”,都介绍完了,其实这才只是万里长征第一步,
因为剩下要做的事情,才是真正难的地方,是按照自己的想法,去实现对应的功能。
而其中肯定会遇到N多类,方法,函数等不知道的,对此,对应的新东西的学习方法,远比知道具体的某个东西,要重要的多。
所以,此处,再介绍“授人以渔”的部分,即对应的学习方法,有了这些方法,相信可以对不熟悉的人,提供其做事情效率,会有帮助。
1.有问题找百度或gogole
技术问题,个别情况,可以通过百度找到解决方法。
更多地,还是google中可以找到更详细的解释。
此处,不多阐述。
学会合理利用网络,可以很大提高做事情的效率。
2.通过对象浏览器中得到对于方法和属性的解释
前面提到的,类似于这样的:
[InsertableContentSource("Just WlwPluginDemo")]
的代码,对应的都是含义是什么,其实,我们可以通过对象浏览器而查到。
右击引用中的WindowLive.Writer.Api,选择View In Object Browser:
就打开了对象浏览器,其中可以看到WindowLive.Writer.Api中,包含了很多方法(函数)和属性(Attribute)。
而对于属性Attribute的赋值,包括上面说的WriterPlugin和InsertableContentSource,其每个参数的具体含义,都可以完全查询到:
解释如何查询对象的详细的方法和属性,目的是为了,对于其他你所不知道的方法或属性,你也都可以通过这种方法来找到,这样就不会一头雾水了。
3.选中内容,然后按F1,调用微软自带的帮助系统
比如对于前面的代码:
public override DialogResult CreateContent(IWin32Window dialogOwner, ref string newContent) { newContent = "This is to demo WLW Plugin."; return DialogResult.OK; }
我对于DialogResult不清楚含义,或者说还想要了解除了DialogResult.OK之外,其他有哪些枚举的值,那么在VS2010中,选中DialogResult:
然后按F1,就会自动调用对应的帮助系统(对应的帮助系统,可能是本地的网页打开的形式,也可能是在线的帮助系统,这取决于你安装VS2010时候的设置。我这里打开的是在线的帮助系统):
可以看到,对于DialogResult,除了OK,还有Cancel等其他枚举值。
所以,如果你会举一反三的话,那么就应该会想到,以后如果是点击某个Cancel按钮,那么应该就是返回对应的DialogResult.Cancel了。
4.注意观察系统对于鼠标所指示的内容的提示
比如,对于一个别人中拷贝过来的一些代码,但是自己对其中的类等不熟悉,不知道是什么类型,那么用鼠标移动到对应的位置上面,VS会自动提示你其类型。
比如我对于拷贝过来的InsertableContentSource不知道是啥东东,那么鼠标移动其上,则会有对应提示:
说明是WindowsLive.Writer.Api类的一个InsertableContentSourceAttribute属性。
然后再用前面提到的调用系统帮助,则会更加深入的学习和了解具体的用法。
总之,多思考,多总结,多学习点方法,这样,无论遇到任何新的东西,只要有帮助系统,说明文档,都是可以找到对应的解释的,然后就是去实践,搞懂真正的使用方法了。这部分内容,就不是教程所能解释的了,就需要自己大量的练习了。