学习编写Windows Live Writer插件

参考:http://www.cnblogs.com/liulun/archive/2009/05/27/1491116.html

Live Writer API参考:http://msdn.microsoft.com/en-us/library/aa702864.aspx

获取用户名密码参考:http://www.cnblogs.com/xiaoshatian/archive/2010/09/14/1825561.html

 

新建一个类库

添加两个关键引用

using WindowsLive.Writer.Api;
using System.Windows.Forms;
using System.Web;

第一个引用的dll文件在你安装windows live writer的根目录下

名字叫WindowsLive.Writer.Api.dll

添加一个类文件,此文件程序用来处理用户插入的代码

    public static class ContentProcessor
    {
        public static string ProcessedContent { get; private set; }
        public static void Process(string originalContent)
        {
            ProcessedContent = (!string.IsNullOrEmpty(originalContent)
                ?string.Format("<fieldset style=\"background-color:#E0EFF6;color:#15428B\"><pre>{0}</pre></div>", HttpUtility.HtmlEncode(originalContent))
                :string.Empty
                );
        }
    }

添加一个windows form窗体,如图:

学习编写Windows Live Writer插件

给确定按钮添加的事件为

        private void button1_Click(object sender, EventArgs e)
        {
            ContentProcessor.Process(this.textBox1.Text);
            this.Close();
        }

其中ContentProcessor.Process(this.textBox1.Text);
就是调用的我们上一个类文件中的处理程序

新增一个类文件

    [WriterPlugin("7c371eef-e350-4aae-af28-91613a9137e3", "xland", Description = "insert code plugin", Name = "xland", PublisherUrl = "http://www.cnblogs.com/liulun")]
    [InsertableContentSource("insert code",SidebarText="insert code")]
    public class MyPlugin:ContentSource
    {
        public override DialogResult CreateContent(IWin32Window dialogOwner, ref string content)
        {
            new ProcessForm().ShowDialog();
            content = ContentProcessor.ProcessedContent;
            return (!string.IsNullOrEmpty(content) ? DialogResult.OK : DialogResult.No);
        }
    }

其中7c371eef-e350-4aae-af28-91613a9137e3为一个GUID
其他的一些信息是插件在live writer中的信息
函数中第一句是创建一个窗口(我们刚才制作的窗口)
第二句获取我们输入的数据(处理过后的数据)
第三句让live writer知道有东西要插入。
content变量是live writer中的,所以要用ref修饰

都完成后只要把生成的dll文件放在live writer安装目录下Plugins文件夹内就可以了

此文章就是用这个插件写的

贴个图看下

学习编写Windows Live Writer插件

源代码下载:LiveWriterPlugin.rar



另外:
我在我的blog中设置了这样的样式

pre { white-space: pre-wrap; /* css-3 */ white-space: -moz-pre-wrap; /* Mozilla, since 1999 */ white-space: -pre-wrap; /* Opera 4-6 */ white-space: -o-pre-wrap; /* Opera 7 */ }
* html pre { word-wrap: break-word; /* Internet Explorer 5.5+ */ white-space : normal ; /* Internet Explorer 5.5+ */ }

具体设置方法是,进入你的博客园后台》》》选项》》》config》》》通过CSS定制页面 
这样设置主要是不让代码太宽,撑破页面

 

******************************************************

Windows Live Writer是颇受欢迎的博客客户端,除了支持多种博客服务之外,还具备良好的扩展性,允许第三方开发插件来扩展或补充功能,我也为它开发了两个插件:用来补充Slug的SlugHelper和补充图片Exif信息的ExifInfo

但你有没有想过,虽然这些第三方插件的确为我们提供了方便,但它们真的值得信赖吗?

 

最近搬家,没有网络,闲暇时便用“.NET Reflector”来查看Windows Live Writer的内部实现,期望能找到对我开发插件有帮助的API,没想到却发现了令人大吃一惊的东西,Windows Live Writer插件可以轻而易举地窃取你的博客账号和密码!

想知道是怎么做到的吗?只需要随便开发一个插件,添加对“WindowsLive.Writer.BlogClient.dll”的引用和以下的using:

1
using WindowsLive.Writer.BlogClient;

在适当的位置添加以下代码:

1
2
3
4
5
6
7
8
9
10
11
StringBuilder sb = new StringBuilder();
string[] blogIds = BlogSettings.GetBlogIds();
foreach (string blogId in blogIds)
{
BlogSettings blogSetting = BlogSettings.ForBlogId(blogId);
sb.AppendLine("blogname: " + blogSetting.BlogName);
sb.AppendLine("homepage: " + blogSetting.HomepageUrl);
sb.AppendLine("username: " + blogSetting.Credentials.Username);
sb.AppendLine("password: " + blogSetting.Credentials.Password);
sb.AppendLine("===============================================");
}

执行后查看sb.ToString(),你会看到你添加到Windows Live Writer里的所有博客信息,包括博客名称、主页地址、用户名和密码,可怕之处就在于密码是明文的。

如果插件的作者心怀不轨,他完全可以利用这些内容来控制你的博客。所以在使用第三方插件之前,最好能够确定该插件是值得信赖的。

另外,开源的插件也是个不错的选择,你可以检查插件的代码中是否包含泄露隐私的内容,并自行编译使用。

我开发的SlugHelperExifInfo两个插件都是开源项目,欢迎使用。

学习编写Windows Live Writer插件

上一篇:NETSH WINSOCK RESET这条命令的含义和作用?


下一篇:Linux网络管理员不得不了解的系统目录/proc/sys/net/