最新消息:20210917 已从crifan.com换到crifan.org

【详细图文教程】如何使用C#给WLW(Windows Live Writer)编写插件

Web crifan 1635浏览 0评论

【关于WLW的简介】

WLW是Windows Live Writer的缩写。

WLW是一个可以用于本地离线发布博客的工具软件。

关于用WLW去离线发布帖子的好处,参考这里:

通过Windows Live Writer离线发布文章到WordPress站点上,同时支持固定链接,图片上传,标签,分类

 

【关于WLW插件】

WLW插件,其实就是一个dll类库,用于给WLW添加额外的功能。

比如我写过的,可以浏览skydrive上面的文件并插入。

目前微软官网已有很多插件可供使用:

Windows Live Writer Plug-ins

 

【关于如何编写WLW插件】

1.官方参考文档

Windows Live Writer Plugin API

Creating a Plugin

编写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的版本】

根据官网的解释:

.NET Framework Versions

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.org")]

    [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源码下载】

上述代码,可以去这里下载:

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属性。

然后再用前面提到的调用系统帮助,则会更加深入的学习和了解具体的用法。

 

总之,多思考,多总结,多学习点方法,这样,无论遇到任何新的东西,只要有帮助系统,说明文档,都是可以找到对应的解释的,然后就是去实践,搞懂真正的使用方法了。这部分内容,就不是教程所能解释的了,就需要自己大量的练习了。

转载请注明:在路上 » 【详细图文教程】如何使用C#给WLW(Windows Live Writer)编写插件

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
91 queries in 0.194 seconds, using 23.41MB memory