現在,有許多軟件安裝後會在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->