zoukankan      html  css  js  c++  java
  • 学习编写Windows Live Writer插件

    1、参考链接

    参考: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

    经过修改后的项目文件查看如下:LiveWriterPlugin2.7z

    2、Live Writer API调用实例

    2.1、添加关键引用

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

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

    名字叫WindowsLive.Writer.Api.dll

    2.2、框体类文件

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

        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窗体,如图:

    image

    给确定按钮添加的事件为

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

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

    2.2.1、插件类文件

        [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文件夹内就可以了

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

    贴个图看下

    image

    2.2.2、插件类文件图标

    c#项目中,添加图片到根目录(图片为18*16大小),右键图片属性,生成操作:嵌入的资源,添加ImagePath如下。

        [WriterPlugin("7c371eef-e350-4aae-af28-91613a9137e3", "xland", ImagePath="icon.png",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);
            }
        }

    2.2.3、源代码下载

    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定制页面 
    这样设置主要是不让代码太宽,撑破页面

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

    3、获取用户信息

    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两个插件都是开源项目,欢迎使用。

  • 相关阅读:
    JS 日期加多少天,减多少天
    SQL 触发器
    SGU100
    连续子数组的最大和
    字符串的排列
    二叉搜索树与双向链表
    数组中出现次数超过一半的数字
    复杂链表的复制
    二叉树中和为某一值的路径
    二叉搜索树的后序遍历序列
  • 原文地址:https://www.cnblogs.com/dorothychai/p/4218763.html
Copyright © 2011-2022 走看看