読み込んでいます...
2009年08月12日

其实我一直在用Firefox,发现Firefox上面有一些不错的RSS阅读器,特别是那个Simple Rss Reader我觉得很不错,只可惜我自己很少订阅RSS了,但是我很多同学都还在用IE,所以我就做了一个IE RSS阅读器,这个阅读器功能也比较简单,就是RSS标题的轮换,可以一个一个的分别查看RSS,可以订阅多个RSS,鉴于是0.1版本,主要写内核稳定性方面比较多,现在就先放下载吧。不用IE的人可以略过。。

下载地址

416路过 0评论 IE Addon 阅读全文..
2009年07月16日

这几天晚上回去有点时间,因为我用一点闲的时间做了一个IE的嘀咕插件,这个插件可以让IE用户方便的嘀咕,不过现在暂时还是0.1版本,如果有需要的用户可以下载下来使用,我自己觉得还不错,就是代码写的有点乱,过一段时间我会做嘀咕的.NET Framework的封装,顺便会把这个插件的代码给清理一下,不过暂时来说这个插件已经基本可用了。

IEdi就是一个IE工具栏,这个工具栏就是能够方便的让用户看到自己的嘀咕的信息,同时可以在浏览器中进行嘀咕的发送和回复,暂时还没有发送悄悄话的功能,不过已经加到roadmap里面了,也就是说以后一定会加上去的。

IEdi的样子可以看下面的图片,发送嘀咕的快捷键为ctrl+b,就能够换出IEdi的发送窗口咯,非常方便简单。

下载地址,有任何问题请反馈给我

下载最新版本

在经过前面那么多的努力之后,我们终于有一个简单的IE Extension了,就是我们的IE Toolbar,在开发IE Toolbar的时候我们还需要注意几点,就是在继承BandObject之后,我们开发的控件要设置minisize,也就是最小值,如果不设置最小值的话,就算你开发了Toolbar或者任何其他的东西,都无法在IE中看到,这是一个值得注意的地方。

OK,在经历了万千的磨难之后我们终于可以写一个Hello World了,示例代码如下所示。

namespace IEToolbar
{
    [Guid(
"588E57A3-E8F7-43e8-8C98-406FBF563E59")]
    [BandObject(
"IEToolbar", BandObjectStyle.Horizontal |
     BandObjectStyle.ExplorerToolbar, HelpText
= "IE Test Toolbar")]
    [ComVisible(
true), ClassInterface(ClassInterfaceType.None)]
    
public partial class Toolbar : BandObject
    {
        
public Toolbar()
        {
            InitializeComponent();
        }

        private void Toolbar_Load(object sender, EventArgs e)
        {
        }

        private void toolStripLabel1_Click(object sender, EventArgs e)
        {
            MessageBox.Show(
"Hello world");
        }
    }
}

上面代码我们写了一个Load方法和一个Click方法,在toolStrip里面我们只是加了一个Label,design.cs代码如下。如果你做的Toolbar不能显示的话,可以对比一下我的这个代码。

private void InitializeComponent()
{
    
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
    
this.toolStripLabel1 = new System.Windows.Forms.ToolStripLabel();
    
this.toolStrip1.SuspendLayout();
    
this.SuspendLayout();
    
//
    
// toolStrip1
    
//
    this.toolStrip1.Dock = System.Windows.Forms.DockStyle.Fill;
    
this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
    
this.toolStripLabel1});
    
this.toolStrip1.Location = new System.Drawing.Point(0, 0);
    
this.toolStrip1.Name = "toolStrip1";
    
this.toolStrip1.Size = new System.Drawing.Size(373, 25);
    
this.toolStrip1.TabIndex = 0;
    
this.toolStrip1.Text = "toolStrip1";
    
//
    
// toolStripLabel1
    
//
    this.toolStripLabel1.Name = "toolStripLabel1";
    
this.toolStripLabel1.Size = new System.Drawing.Size(49, 22);
    
this.toolStripLabel1.Text = "Click me!";
    
this.toolStripLabel1.Click += new System.EventHandler(this.toolStripLabel1_Click);
    
//
    
// Toolbar
    
//
    this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
    
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    
this.Controls.Add(this.toolStrip1);
    
this.MinimumSize = new System.Drawing.Size(150, 24);
    
this.Name = "Toolbar";
    
this.Size = new System.Drawing.Size(373, 25);
    
this.Load += new System.EventHandler(this.Toolbar_Load);
    
this.toolStrip1.ResumeLayout(false);
    
this.toolStrip1.PerformLayout();
    
this.ResumeLayout(false);
    
this.PerformLayout();
}

上面的代码只是一个Designer,如果你的Toolbar不能运行的话,就需要对比一下我这个了,看看自己是否做了不正确的事情。OK,同样,代码还是给下载吧。

IETest.rar (478.14 kb)

939路过 8评论 IE Addon 阅读全文..

在上一节的IE扩展开发中,我们说了一下BandObject和COM的封装,当然里面还有一些其他的类,这些都可以拿来直接使用,由于代码量很多,所以我只粘贴了一部分,而代码可以从这里下载。各位看官可以好好的研究一下如何开发一个简单的IE扩展了。

IE扩展并没有像Firefox那样可以用一个XPI进行安装,所以这里我们还是要使用msi进行安装。在制作安装包之前,我们要知道IE是怎么识别这个扩展的。其实IE识别扩展的方法很简单,就是在注册表里面新增加一个字段而已,注册表的地址在Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Browser Helper Objects里面,打开注册表的这个位置我们可以看到里面有很多的GUID,这些都是浏览器的一些扩展。前面我们定义了我们的Toolbar的GUID就是用在这里了,所以在安装的时候我们就要重写注册事件注册我们的注册表。

首先还是做一个安装包,我们只用添加Primary output就可以了,然后系统会问是否要添加ieframe.dll,先选择是,然后我们将这个dll的属性的exclude变为true,否则安装的过程中还需要注册这个dll。安装包做好了应该是如下图所示的。

然后这里我们就需要自定义用户的一些安装的行为并重写这些行为,我们在资源管理器上方,有一个customer action editor,我们选中它并添加和安装事件的关联。

选中之后我们就可以看到一些action,然后都添加primary output,增加关联,如下图所示。

添加完成后,我们的安装的action就应该如下图所示了。

在制作好安装包之后,我们就要重写相应的事件了。这里我们在我们的Toolbar项目中添加一个Installer项目,然后编写相应的代码,具体代码如下所示。

namespace IEToolbar
{
    [RunInstaller(
true)]
    
public partial class IEToolbarInstaller : Installer
    {
        
public IEToolbarInstaller()
        {
            InitializeComponent();
        }
        
//重写安装事件
        public override void Install(IDictionary stateSaver)
        {
            
base.Install(stateSaver);

            //注册注册表
            RegistrationServices reg = new RegistrationServices();
            
if (!reg.RegisterAssembly(this.GetType().
            Assembly, AssemblyRegistrationFlags.SetCodeBase))
            {
                
//如果注册不成功则抛出异常
                throw new Exception("Install error :
                                    Can not register your DLL to IE
");
            }
        }
        
//重写卸载事件
        public override void Uninstall(IDictionary savedState)
        {
            
base.Uninstall(savedState);

            RegistrationServices reg = new RegistrationServices();
            
//移除注册表内容
            if (!reg.UnregisterAssembly(this.GetType().Assembly))
            {
                
throw new InstallException("Uninstall error :
                                           Failed to unregister the toolbar for COM
");
            }
        }
    }
}

这样我们在安装的过程中就对注册表进行了相应的操作,把相应的DLL注册到了IE认识的注册表里面,这样,当下一次IE启动的时候,就会运行我们的IE插件了。

652路过 2评论 IE Addon 阅读全文..

OK,好吧好吧,首先我先声明我不是专业开发浏览器插件的,只是我用C++/C#/JavaScript,而这些技术的开发也都是用这些东西,所以我去尝试开发这些东西,刚好又有需要使用的地方,所以才会写下此文,当然看到有人转我的链接说我这个博客是【专业开发浏览器插件的博客】,让我有点无奈,前面其实还有Windows Mobile开发系列和Silverlight开发系列,可惜都被无情的无视了,因为工作上暂时需要看浏览器插件的开发,所以才会写下这类文章。

另外我也承认,我知道用C#开发IE浏览器插件的中文资料很难找,就算有高手会做也不一定会写,就像Firefox插件的资料一样很难找一样,所以我写这些文章也为了能够方便后来的人能少走点弯路,直接上路,从而受到老板的嘉奖,呵呵。同样,也为了提高我的博客的流量。:)

好了,废话说了这么多,我们开始正题。要做IE插件或者是任何Windows窗体的扩展,我们都不得不提到BandObject,BandObject是很多开发人员用来扩展IE和Windows窗体的一个类,可以用来自己定义系统的窗体。当然如果开发人员对COM或ATL之类的非常熟悉的话,那么可以自定义或者追加一些功能到BandObject里面,BandObject可以看做是一个类库,下图就是我们可以使用BandObject扩展我们的窗体的地方。当然,出了这里我们还能够定义在任务栏中。

所以我们能够使用BandObject定义我们的IE浏览器了,我们可以做一个Windows自定义控件并继承自BandObject,那么我们这个Windows自定义控件就能够在窗体中使用了。

既然我们现在做的是一个IE的插件,我们就需要在系统中引用一个SHDOCVW.DLL,这个是ActiveX控件,没有的可以在网上找或者发邮件给我找我要。注意这个地方添加引用后属性里面的FileType是ActiveX,而不是一个Assembly,这是一个浏览器插件需要的一个基本的DLL。添加之后记得添加引用。

using SHDocVw;

首先我们创建一个类库项目,并且选择相应的.NET Framework版本,2.0,3.5都行,就看你觉得用户有没有这个版本的Framework了。在项目中,我们创建一个新项目,这个项目就是Windows自定义控件,创建之后我们要修改一下代码,因为默认情况下Windows自定义控件是继承自Winform控件的,这里我们改成继承自BandObject,示例代码如下。

namespace IEToolbar
{
    
//这个地方是我们的dll的Guid,我们可以在线生成一个
    [Guid("588E57A3-E8F7-43e8-8C98-406FBF563E59")]
    
//这里就是我们的工具是什么类型的BandObject,我们可以看到这里是ExplorerToolbar
    [BandObject("IEToolbar", BandObjectStyle.Horizontal | BandObjectStyle.ExplorerToolbar, HelpText = "IE Test Toolbar")]
    [ComVisible(
true), ClassInterface(ClassInterfaceType.None)]
    
//这里我们改成默认继承自BandObject
    public partial class Toolbar : BandObject
    {
        
public Toolbar()
        {
            InitializeComponent();
        }
    }
}

通过上面的代码,我们就可以制作一个简单的IE Toolbar在IE里面了。等等,就这么简单?不,当然不是了,这个只是一小步而已,我们看看BandObject里面,很多都是使用了COM,所以这里我们要封装一下COM,让无论是BandObject还是我们自己都能够很好的使用,一些简单的代码如下所示。 

namespace IEToolbar
{

    abstract class ExplorerGUIDs
    {
        
public static readonly Guid IID_IWebBrowserApp = new Guid("{0002DF05-0000-0000-C000-000000000046}");
        
public static readonly Guid IID_IUnknown =         new Guid("{00000000-0000-0000-C000-000000000046}");
    }

    [Flags]
    public enum BrowserNavConstants
    {
        navOpenInNewWindow
= 0×1,
        navOpenInBackgroundTab
= 0×1000,
        navNoHistory
= 0×2,
        navNoReadFromCache
= 0×4,
        navNoWriteToCache
= 0×8,
        navAllowAutosearch
= 0×10,
        navBrowserBar
= 0×20,
        navHyperlink
= 0×40
    }

    [Flags]
    public enum DBIM : uint
    {
        MINSIZE  
=0×0001,
        MAXSIZE  
=0×0002,
        INTEGRAL  
=0×0004,
        ACTUAL    
=0×0008,
        TITLE    
=0×0010,
        MODEFLAGS
=0×0020,
        BKCOLOR  
=0×0040
    }

    [Flags]
    public enum DBIMF : uint
    {
        NORMAL
= 0×0001,
        FIXED
= 0×0002,
        FIXEDBMP
= 0×0004,
        VARIABLEHEIGHT
= 0×0008,
        UNDELETEABLE
= 0×0010,
        DEBOSSED
= 0×0020,
        BKCOLOR
= 0×0040,
        USECHEVRON
= 0×0080,
        BREAK
= 0×0100,
        ADDTOFRONT
= 0×0200,
        TOPALIGN
= 0×0400,
        NOGRIPPER
= 0×0800,
        ALWAYSGRIPPER
= 0×1000,
        NOMARGINS
= 0×2000
    }
    
//很多很多……
}

OK,到这一步我想应该都已经比较复杂了,不过如果这些都写好了的话,下一次就没有那么复杂了,可以拿来直接使用了。我们有了BandObject和COM的封装,这样BandObject就能够工作了,不过记得要在同一个命名空间里面哦。工作只是工作了,我们还需要简单的定义一下我们的组件。打开BandObject类,设置一下名字。 

//设置一下属性
protected static BandObjectStyle style = BandObjectStyle.ExplorerToolbar;
protected static string toolbarName = "IE Test Toolbar";
protected static string toolbarHelpText = "IE Test Toolbar";

public BandObject()
{              
    InitializeComponent();
    
this.BackColor = Color.Transparent;
}

这样在我们的窗体里面,其名称就是“IE Test Toolbar”了,这样,我们一个BandObject和COM的封装就做好了,现在我们就是自定义我们的Toolbar了,但是制作完毕后,并不能马上显示到IE中,因为这里我们还需要注册到注册表中,并且做一些事情,这些事情有点复杂,所以我们留到后面的文章中讲解。

代码留到后面一篇文章下载。

663路过 1评论 IE Addon 阅读全文..