如果使用過Netants的朋友可能都知道,NetAnts在IE中添加了右鍵菜單功能,隻要在頁面的一個連結或者圖檔上點選右鍵後在菜單中選擇 Down By Netants 就可以調用Netants下載下傳該連結指向的檔案。在本文中作者将介紹如何通過VB來實作這樣的功能。
要實作在IE右鍵菜單中添加菜單項的功能,要依次實作以下步驟:
1、在系統資料庫HKEY_CURRENT_USER/Software/Microsoft/Internet Explorer/MenuExt項下建立一個新項,項的名稱既出現在菜單中的标題,例如你想建立的菜單項标題為Add URL,則建立項的名稱為HKEY_CURRENT_USER/Software/Microsoft/Internet Explorer/MenuExt/Add URL
2、将建立項的預設值設定為一個URL位址,當使用者點選菜單項後,IE就會調用URL指向的頁面中的腳本,在目标頁面的腳本中通過通路IE提供的external對象的menuArguments屬性就可以通路IE中的頁面中的各種對象,例如連結、圖檔、表單域、被選中的文本等。詳細的幫助請參考MSDN中關于InternetExplore object的幫助,熟悉了Window對象才可以比較好的了解下面的腳本。
對于如何實作自身的程式通路menuArguments的問題,我們可以仿效Netants的做法,首先建立一個OLE Automation對象,然後在腳本中調用該對象,并将頁面資訊傳遞對象處理。下面我們需要首先通過VB建立一個對象:
打開VB,點選菜單: File | New ,在建立工程視窗中選擇 ActiveX Dll 後按确定鍵建立一個ActiveX DLL工程。然後在工程清單視窗中将Class1的Name屬性更改為NetAPI,然後在NetAPI的代碼視窗中添加如下代碼:
Public Sub AddURL(URL As String, Info As String)
MsgBox Info, vbOKOnly, URL
End Sub
儲存檔案,将工程檔案儲存成NetSamp.vbp。然後在菜單中選擇 File | Make NetSamp.dll建立對象動态連接配接庫。
接下來是注冊庫,在Windows目錄下找到Regsvr32.exe,然後将其拷貝到netsamp.dll所在目錄下,将netsamp.dll的的圖示拖到Regsvr32.exe上放開,這時Regsvr32.exe就會彈出對話框提示對象注冊成功。
打開UltraEdit(或者其它文本編輯器)将下面的腳本代碼輸入編輯器中:
<script language="VBScript">
Sub OnContextMenu()
On Error Resume Next
set srcEvent = external.menuArguments.event
set EventElement = external.menuArguments.document.elementFromPoint(srcEvent.clientX, srcEvent.clientY)
set objNetSamp=CreateObject("NetSamp.NetAPI")
if srcEvent.type = "MenuExtAnchor" then
set srcAnchor = EventElement
do until TypeName(srcAnchor)="HTMLAnchorElement"
set srcAnchor=srcAnchor.parentElement
Loop
Call objNetSamp.AddUrl(srcAnchor.href,srcAnchor.innerText)
elseif srcEvent.type="MenuExtImage" then
if TypeName(EventElement)="HTMLAreaElement" then
Call objNetSamp.AddUrl(EventElement.href,EventElement.Alt)
else
set srcImage = EventElement
set srcAnchor = srcImage.parentElement
do until TypeName(srcAnchor)="HTMLAnchorElement"
set srcAnchor=srcAnchor.parentElement
if TypeName(srcAnchor)="Nothing" then
call objNetSamp.AddUrl(srcImage.href,srcImage.Alt)
exit sub
end if
Loop
Call objNetSamp.AddUrl(srcAnchor.href, srcImage.Alt)
end if
elseif srcEvent.type="MenuExtUnknown" then
set srcAnchor = EventElement
do until TypeName(srcAnchor)="HTMLAnchorElement"
set srcAnchor=srcAnchor.parentElement
if TypeName(srcAnchor)="Nothing" then
Call objNetSamp.AddUrl(EventElement.href,EventElement.innerText)
exit sub
end if
Loop
Call objNetSamp.AddUrl(srcAnchor.href,srcAnchor.innerText)
end if
end Sub
call OnContextMenu()
</script>
将檔案儲存到c:/program files 下,檔案名為 geturl.htm
從上面的腳本可以看到,首先通路external.menuArguments屬性,獲得使用者單擊滑鼠右鍵位置的對象,然後根據對象的不同獲得它的URL,然後建立IEContextMenu.IEMenu1對象并調用該對象的AddURL方法。
接下來是為右鍵菜單建立注冊項,打開UltraEdit(或者其它文本編輯器)将下面的注冊資料輸入編輯器中
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER/Software/Microsoft/Internet Explorer/MenuExt/&Get URL]
@="c://program files//geturl.htm"
"Contexts"=dword:00000022
将檔案以reg為字尾儲存,然後在Windows資料總管中輕按兩下該檔案将注冊項添加到系統資料庫中,然後打開IE,右鍵點選一個連接配接或者圖檔,在彈出菜單中會出現一個Get URL項,點選該項,就會出現一個消息框顯示點選的連接配接或者圖檔的URL位址
下面再介紹一下上面注冊項中Contexts項的作用,通過該項可以制定菜單項在右鍵點選IE中的什麼對象時出現,它可以為以下值的“或”組合:
對象 值
預設 0x1
圖檔 0x2
控件 0x4
表單域 0x8
選擇文本 0x10
錨點 0x20
例如上面我們希望菜單項在使用者點選圖檔或者超連結時出現,那麼我們就将值設定為dword:00000022,既在點選圖檔 或者 錨點時出現菜單。一個錨點是頁面中描述一個超連結的對象。如果不設定Contexts項,則菜單項會在點選任何對象時出現在右鍵菜單中。
通過上面的程式介紹我們可以看到IE滑鼠右鍵菜單的工作過程。前面講了,Netants就是使用這樣的方法通過在腳本中建立對象來實作調用NetAnts的,那麼我們如果安裝了NetAnts,就可以在程式中通過調用NetAnts對象來調用NetAnts。
建立一個新工程,點選菜單 Projects | References 項,選擇其中的 AntAPI 1.0 Type Library 項,如果沒有點選Browser按鈕,在檔案清單框中選擇網絡螞蟻目錄下的NetAPI.dll後按打開鍵。在Form1中添加一個CommandButton按鈕,在Command1_Click事件中添加如下代碼:
Dim ant As New ANTAPILib.AntAPIObj
ant.AddUrl "http://www.applevb.com/z.zip", "", "http://www.applevb.com/"
點選command1,然後NetAnts就會運作并且将http://www.applevb.com/z.zip添加到任務中。