有没有人会在ie上加一个按钮,想网络蚂蚁那样???????,我知道要改注册表,怎么改呢???
解决方案 »
- 怎么设置程序的版本信息?
- 对话框之间发消息
- 如何实现一直按着某个键不松开
- 请各位来看看,这个该怎么办?谢了
- 问个问题.请大家帮忙解决一下.搞定马上结帖.在线..
- 如何在mainfame中拦截MW_MINIMIZE,使窗口隐藏起来??(在线!!!!)
- 怎样在一个工程中加入另一个工程的对话框我已将此对话框的头文件与CPP加入到我的工程中但就是看不到,是不是还有什么东东呀?
- 关于C++ Builder中 调用DLL的问题?
- Vc中直接调用Access中的Form或Report问题????
- Invalid Handle
- 关于椭圆填充颜色的问题
- 高分求救!!使用微软输入法在CRichEditView里面输入汉字的时候,到底输入法给CRichEditView发了什么消息使它显示汉字???
Dino Esposito
张中华 翻译讲解
==============
张某前言:金山词霸、网络蚂蚁这些软件是怎么在IE5.0里添加工具条按钮和右键菜单呢?读了Dino Esposito的这篇文章,你就一清二楚了。你可以只看中文翻译讲解部分,如不能充分理解明白,请看对照的原文。
本文原文在MSDN网站上有:
Dino Esposito, "Customizing Microsoft Internet Explorer 5.0", MIND, 1999年11月期
在MSDN中的路径为:
Periodicals | Periodicals 1999 | Microsoft Internet Developer | November
MSDN中,关于IE应用开发的更多信息位于:
Platform SDK | Web Services | Workshop | Reusing Browser Technology
http://www.tech521.com/show_data.asp?tid=1697http://www.microran2002.com/Paper/InternetExplorerToolBar.htm
从5.0版本开始,Internet Explorer允许你定制工具栏,你可以在Internet Explorer添加自己的按钮以便激活你自己的应用程序。同大多数下载工具一样,在IE工具栏添加按钮一般都是通过修改注册编辑表实现,IE启动时能够通过查询注册编辑表识别你对它的扩展。
在修改注册编辑表之前,你需要准备两组图标,一个活动的图标,一个灰色缺省图标,这两个图标可以保存在两个图标文件中,也可以保存在一个Exe或者DLL文件的资源中。
下面是网络蚂蚁修改注册表的例子:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Extensions\{57E91B47-F40A-11D1-B792-444553540000}]
"CLSID"="{1FBA04EE-3024-11D2-8F1F-0000F87ABD16}"
"Default Visible"="Yes"
"HotIcon"="C:\\PROGRA~1\\NETANTS\\NetAnts.exe,1001"
"Icon"="C:\\PROGRA~1\\NETANTS\\NetAnts.exe,1000"
"Exec"="C:\\PROGRA~1\\NETANTS\\NetAnts.exe"
"ButtonText"="NetAnts"
"MenuText"="&NetAnts"
"MenuStatusBar"="Launch NetAnts"
这个例子对所有的用户都有效,如果你只希望它适用当前用户,你需要用HKEY_CURRENT_USER替换HKEY_LOCAL_MACHINE主键。
为了实现对IE 的扩展,你需要用Guidgen.exe生成一个全球唯一定位符。以替换上面的{57E91B47-F40A-11D1-B792-444553540000}键。
CLSID的键值为系统保留,你不要对它做任何修改。
Default Visible用于控制按钮默认情况下是否显示,为了显示,它应设置成“Yes”。
HotIcon和Icon用于规定显示的两种按钮图标,它的设置格式为"path,resource_id",前面是一个Exe或Dll文件的完整路径含文件名,后面跟一个“,”和一个图标在资源中的ID标识,如果你不清楚ID 标识,你可以借助于Visual C++以资源方式打开这个可执行文件或动态连接库,察看它包含图标的资源标识。
Exec为单击按钮或工具菜单时执行的文件,对于上面的例子就是执行网络蚂蚁主程序的路径。
后面三项分别对应按钮提示、菜单标题、和状态栏提示。
对于一个动态连接库而言,情况可能有些稍稍不同,下面是我自己定义的一个扩展键:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Extensions\{B7FE5D70-9AA2-40F1-9C6B-12A255F085E1}]
"Default Visible"="Yes"
"ButtonText"="My button"
"MenuText"="My menu"
"MenuStatusBar"="This will call my COM object"
"HotIcon"="C:\\IEExt\\IEEXTE~1\\RELEAS~1\\IEEXTE~1.DLL,202"
"Icon"="C:\\IEExt\\IEEXTE~1\\RELEAS~1\\IEEXTE~1.DLL,201"
"CLSID"="{1FBA04EE-3024-11d2-8F1F-0000F87ABD16}"
"ClsidExtension"="{B7FE5D70-9AA2-40F1-9C6B-12A255F085E1}"
很明显,它没有Exec键名,但是它多了一个ClsidExtension键名,包含一个类标识,通过这个类标识,IE能够找到实现扩展的COM组件。ClsidExtension实质上等于COM组件的全球唯一定位符。
COM组件应该在注册时实现上述注册项的添加。而且COM组件还应该实现IoleCommandTarget接口,另外如果你的COM 对象还需要存取当前IE显示的DHTML网页,你还需要实现IobjectWithSite接口。
在实现IoleCommandTarget接口的时候,你必须提供IoleCommandTarget::Exec方法,这个方法有一个参数nCmdID标识调用是工具栏按钮单击激活或是菜单响应激活,这种差别允许编程人员为两种不同的事件提供不同的行为。
当你实现IobjectWithSite接口时,Internet Explorer会调用IobjectWithSite::SetSite,并传递给它一个IshellBrowser指针,借助于这个指针可以获得与浏览相关的IwebBrowser对象,通过它你就可以对HTML网页进行解析,访问页面中的每一个元素了。
本文附带了一个IE扩展的COM组件例子以供参考,使用时你只需运行RegSvr32.exe /s /c IEExension.dll即可完成注册,该程序在用Visual C++6.0在WindowsXP的IE6.0环境下调试通过。
Extensions\
{kjkjlkasdfjsdlkjf} //这些东西可以先拷贝一个,然后小改动
\
ButtonText test //按钮标题
CLSID {sadjflksdjf;}
Default Visible Yes //是否可见
HotIcon c:\test.exe,1 //图标
Icon C:\test.exe,2
从IE5开始便允许我们向工具栏添加自己的按钮,其本质就是修改注册表,添加创建此按钮所需的信息。实现步骤:
1.创建此按钮的GUID(globally unique identifier)
你可以通过Visual Studio中的Guidgen.exe来产生GUID。
例如我生成的GUID是{1FBA04EE-3024-11D2-8F1F-0000F87ABD16}
以下的例子中我都使用这个GUID来作说明。2.创建子键HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Extensions\{1FBA04EE-3024-11D2-8F1F-0000F87ABD16}3.在此子键下创建如下字串值。
(1)CLSID
这是IE的CLSID,其值必须为{1FBA04EE-3024-11D2-8F1F-0000F87ABD16}
(2)Default Visible
指明此按钮默认状态下是否可见,Yes表示可见,No为不可见
(3)ButtonText
按钮文字
(4)Icon
默认状态下的图标全路径,例如c:\vckbase.ico。也可以是EXE文件中包含的图标,例如:C:\PROGRA~1\NETANTS\NetAnts.exe,1000
(5)HotIcon
鼠标移到按钮上时的图标全路径如下子键为按下按钮后需要执行的相应动作:可以是COM对象、浏览条Explorer Bar、脚本Script、可执行文件。
下面我们逐个进行介绍。
①COM对象
你需要建立名为ClsidExtension的字串值,其值应该为此COM对象的GUID
例如金山词霸就使用ClsidExtension来调用自己的COM对象。 ②浏览条Explorer Bar
所谓浏览条就是类似我们按下往IE历史按钮后打开的历史记录列表,其本质好比MFC中的CReBar对象。 浏览条也可以自己制作,
因为超出了本文的范围,暂不作讲解。
为了在按下按钮后打开一个浏览条,你需要建立名为BandCLSID的字串值,其值为浏览条的CLSID③脚本Script
按下按钮后执行的脚本,例如:"%SystemRoot%\web\related.htm"
你可以在这个HTML文件里面加上脚本来得到IE当前的许多信息,需要注意的是假如你想通过Script打开非脚本的HTML文件是不可行的。
请参考如下NetAnts取得当前页所有链接的脚本代码
<script language="VBScript">
--On Error Resume Next
--set NetAntsApi = CreateObject( "NetAnts.API" )
--if err<>0 then
-- --Alert("NetAnts not properly installed on this PC!")
--else
-- --set links = external.menuArguments.document.links
-- --ReDim params(links.length*2)
-- --params(0)=external.menuArguments.document.Url
-- --for i = 0 to links.length-1
-- -- --params(i*2+1)=links(i).href
-- -- --params(i*2+2)=links(i).innerText
-- --next
-- --NetAntsApi.AddUrlList params
--end if
</script> 我们再看一个比较有用的脚本,这段脚本的作用是得到当前地址,并打开此网址的首页。
<script>
--//userURL得到的是当前地址,例如是http://www.vckbase.com/article/controls/index.html
--userURL=external.menuArguments.location.href;
--protocolIndex=userURL.indexOf("://",4);
--serverIndex=userURL.indexOf("/",protocolIndex + 3);
--finalURL=userURL.substring(0,serverIndex);
--external.menuArguments.open(finalURL, "_blank");///打开网址http://www.vckbase.com/
</script> 关于external等对象的具体使用方法请参阅微软的《动态HTML开发参考大全》--人民邮电出版社出版④可执行文件
假如我们想让IE在按下按钮后执行一个可执行文件, 你可以增加名为Exec的字串值,其值为此可执行文件的全路径,
例如c:\windows\notepad.exe或者是一个网址http://www.vckbase.com/index.html下面我们介绍一个简单的例子。
void CIEButtonDlg::OnAdd()
{
--///这是由GUIDGEN产生的GUID:{06926B30-424E-4f1c-8EE3-543CD96573DC}
--CRegKey reg;
--char KeyName[]="Software\\Microsoft\\Internet Explorer\\Extensions\\{06926B30-424E-4f1c-8EE3-543CD96573DC}";
--TCHAR PathName[MAX_PATH];
--TCHAR IconPathName[MAX_PATH]; ///正常时的图标全路径
--TCHAR HotIconPathName[MAX_PATH]; ///鼠标覆盖时的图标全路径
--GetModuleFileName(0,PathName,MAX_PATH); ///得到本可执行文件的路径
--strcpy(IconPathName,PathName);
--strcpy(HotIconPathName,PathName);
--strcat(HotIconPathName,",131"); ///131是图标的ID,你可以以资源方式打开EXE文件就可以看到所有资源及其ID
--strcat(IconPathName,",129");
--reg.Create(HKEY_LOCAL_MACHINE,KeyName);
--reg.SetValue("{1FBA04EE-3024-11D2-8F1F-0000F87ABD16}","CLSID");
--reg.SetValue("Yes","Default Visible");
--reg.SetValue("VC知识库","ButtonText");
--reg.SetValue(IconPathName,"Icon");
--reg.SetValue(HotIconPathName,"HotIcon");
--/////假如是执行脚本,可以是reg.SetValue("c:\\test.html","Script"); ///在test.html 存放你的脚本代码
--reg.SetValue("http://www.vckbase.com/","Exec");///打开网页
"HotIcon"="C:\\IEExt\\IEEXTE~1\\RELEAS~1\\IEEXTE~1.DLL,202"
"Icon"="C:\\IEExt\\IEEXTE~1\\RELEAS~1\\IEEXTE~1.DLL,201"
,202和,201是ico在exe,或是dll中的资源号,担有时此资源号是字符
的形势例如:[Icon Small],但我打入Icon"="C:\\IEExt\\IEEXTE~1\\RELEAS~1\\x.DLL,Icon Small却显示不出来不知怎样才能把这种字符形式的图标资源显示出来,我会另贴一个来给分