天天看點

如何在IE右鍵菜單中添加菜單項

如果使用過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添加到任務中。

繼續閱讀