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

  • 相关阅读:
    【第40套模拟题】【noip2011_mayan】解题报告【map】【数论】【dfs】
    【模拟题(63550802...)】解题报告【贪心】【拓扑排序】【找规律】【树相关】
    【模拟题(电子科大MaxKU)】解题报告【树形问题】【矩阵乘法】【快速幂】【数论】
    IMemoryBufferReference and IMemoryBufferByteAccess
    SoftwareBitmap and BitmapEncoder in Windows.Graphics.Imaging Namespace
    Windows UPnP APIs
    编译Android技术总结
    Windows函数转发器
    Two Ways in Delphi to Get IP Address on Android
    Delphi Call getifaddrs and freeifaddrs on Android
  • 原文地址:https://www.cnblogs.com/dorothychai/p/4218763.html
Copyright © 2011-2022 走看看