【 tulaoshi.com - 编程语言 】
现在,有许多软件安装后会在IE浏览器的工具条上添加一个自定义按钮,为用户运行程序提供了方便,如“网络蚂蚁”、“金山词霸2000”等等。实际上添加这个自定义按钮并不难,只要找到了它在注册表中的位置和有关参数,通过手工或程序都可以轻易完成。而最方便的办法就是调用现成的ActiveX控件来完成这个功能,但Windows似乎没有提供这种控件。下面介绍如何开发和使用这种自定义控件。
实现方法
要添加这种自定义按钮,需要在Windows注册表的HKEY_LOCAL_MACHINESoftwareMicrosoftInternetExplorerExtensions子键下建立一个GUID项,然后在注册表的右栏建立相应的参数并赋值。这些参数及其含义如下:
●ButtonText:自定义按钮上显示的文本字符串;
●Clsid:IE工具条的类标识码,为“{1FBA04EE-3024-11D2-8F1F0000F87ABD16}”;
●DefaultVisible:自定义按钮是否可见,一般为“Yes";
●Exec:自定义按钮执行的目标,为可执行文件或超文本链接等;
●HotIcon:鼠标移上按钮时显示的图标,一般取自EXE文件或DLL文件;
●Icon:按钮正常显示的图标,一般取自EXE文件或DLL文件;
●MenuText:在IE的“工具”菜单中显示的菜单项;
●MenuStatusBar:IE的“工具”菜单项的注释,在状态条上显示。
制作过程
在VB5.0/6.0下建立新的“ActiveX控件”工程。
首先,给控件AddButton的Picture属性添加一个微型Icon图片,这样当使用该控件时,会在控件工具箱上显示这个小图标。然后,再在设计窗口上放置一个image控件,给它也设置一个小图片,使用该控件时,会在其Form上显示该控件的外观。最后,调出代码编辑窗口,在该窗口中键入以下代码,其中API函数调用的代码可以直接从“API文本浏览器”中获得。
OptionExplicit
……'DefaultPropertyValues
……'PropertyVariables
'定义常量
ConstHKEY_LOCAL_MACHINE=&H80000002
ConstREG_SZ=1
'声明存取注册表的API函数
PrivateDeclareFunctionRegCloseKeyLib“advapi32.dll"(ByValhKeyAsLong)AsLong
PrivateDeclareFunctionRegCreateKeyLib“advapi32.dll"Alias“RegCreateKeyA"(ByValhKeyAsLong,ByVallpSubKeyAsString,phkResultAsLong)AsLong
PrivateDeclareFunctionRegDeleteValueLib“advapi32.dll"Alias“RegDeleteValueA"(ByValhKeyAsLong,ByVallpValueNameAsString)AsLong
PrivateDeclareFunctionRegOpenKeyLib“advapi32.dll"Alias“RegOpenKeyA"(ByValhKeyAsLong,ByVallpSubKeyAsString,phkResultAsLong)AsLong
PrivateDeclareFunctionRegSetValueExLib“advapi32.dll"Alias“RegSetValueExA"(ByValhKeyAsLong,ByVallpValueNameAsString,ByValReservedAsLong,ByValdwTypeAsLong,lpDataAsAny,ByValcbDataAsLong)AsLong
'定义注册表中的主键、子键
ConsthKey=HKEY_LOCAL_MACHINE
ConstsubKey0=“SoftwareMicrosoftInternetExplorerExtensions"
'把字符串值存入注册表
PrivateSubSaveString(hKeyAsLong,strPathAsString,strValueAsString,strdataAsString)
DimkeyhandAsLong
DimrAsLong
r=RegCreateKey(hKey,strPath,keyhand)
r=RegSetValueEx(keyhand,strValue,0,REG_SZ,ByValstrdata,Len(strdata))
r=RegCloseKey(keyhand)
EndSub
'从注册表中删除字符串值
PrivateFunctionDeleteValue(ByValhKeyAsLong,ByValstrPathAsString,ByValstrValueAsString)
Dimr,keyhandAsLong
r=RegOpenKey(hKey,strPath,keyhand)
r=RegDeleteValue(keyhand,strValue)
r=RegCloseKey(keyhand)
EndFunction
'把设置写入注册表,定义按钮
PublicSubAddBtn2IEtoolbar()
DimsubKeyAsString
subKey=subKey0&Trim(GUID)&“"
CallSaveString(hKey,subKey,“ButtonText",ButtonText)
CallSaveString(hKey,subKey,“Clsid",
“{1FBA04EE-3024-11D2-8F1F0000F87ABD16}")
CallSaveString(hKey,subKey,“DefaultVisible",“Yes")
CallSaveString(hKey,subKey,“Exec",Exec)
CallSaveString(hKey,subKey,“HotIcon",HotIcon)
CallSaveString(hKey,subKey,“Icon",Icon)
CallSaveString(hKey,subKey,“MenuStatusBar",
MenuStatusBar)
CallSaveString(hKey,subKey,“MenuText",MenuText)EndSub
'从注册表中删除自定义按钮
PublicSubDelBtnFromIEtoolbar()
DimsubKeyAsString
subKey=subKey0&Trim(GUID)&“"
CallDeleteValue(hKey,subKey,“ButtonText")
CallDeleteValue(hKey,subKey,“Clsid")
CallDeleteValue(hKey,subKey,“DefaultVisible")
CallDeleteValue(hKey,subKey,“Exec")
CallDeleteValue(hKey,subKey,“HotIcon")
CallDeleteValue(hKey,subKey,“Icon")
CallDeleteValue(hKey,subKey,“MenuStatusBar")
CallDeleteValue(hKey,subKey,“MenuText")
EndSub
'初始化控件属性
PrivateSubUserControl_InitProperties()
m_ButtonText=m_def_ButtonText
m_Exec=m_def_Exec
m_HotIcon=m_def_HotIcon
m_Icon=m_def_Icon
m_MenuText=m_def_MenuText
m_MenuStatusBar=m_def_MenuStatusBar
m_GUID=m_def_GUID
EndSub
'从存储器中加载属性值
PrivateSubUserControl_ReadProperties(PropBagAsPropertyBag)
m_ButtonText=PropBag.ReadProperty
(“ButtonText",m_def_ButtonText)
m_Exec=PropBag.ReadProperty(“Exec",
m_def_Exec)
m_HotIcon=PropBag.ReadProperty(“HotIcon",
m_def_HotIcon)
m_Icon=PropBag.ReadProperty(“Icon",
m_def_Icon)
m_MenuText=PropBag.ReadProperty
(“MenuText",m_def_MenuText)
m_MenuStatusBar=PropBag.ReadProperty
(“MenuStatusBar",m_def_MenuStatusBar)
m_GUID=PropBag.ReadProperty(“GUID",
m_def_GUID)
EndSub->