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。添加之后记得添加引用。
首先我们创建一个类库项目,并且选择相应的.NET Framework版本,2.0,3.5都行,就看你觉得用户有没有这个版本的Framework了。在项目中,我们创建一个新项目,这个项目就是Windows自定义控件,创建之后我们要修改一下代码,因为默认情况下Windows自定义控件是继承自Winform控件的,这里我们改成继承自BandObject,示例代码如下。
{
//这个地方是我们的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还是我们自己都能够很好的使用,一些简单的代码如下所示。
{
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]
{
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]
{
MINSIZE =0×0001,
MAXSIZE =0×0002,
INTEGRAL =0×0004,
ACTUAL =0×0008,
TITLE =0×0010,
MODEFLAGS =0×0020,
BKCOLOR =0×0040
}
[Flags]
{
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中,因为这里我们还需要注册到注册表中,并且做一些事情,这些事情有点复杂,所以我们留到后面的文章中讲解。
代码留到后面一篇文章下载。
[...] IE Extension with C# – 不得不说的BandObject [...]