Собственно задача:
Добавить пункт меню в IE, который появлялся бы при щелчке по изображению.
Он должен передать URL картинки в мою программу.

Начал с ]]>http://www.rsdn.ru/article/qna/inet/iecmenu.xml]]>
Пункт добавляется - все ок.
По клику на пункт ослик запускает скрипт.
Для того чтобы упростить себе жизнь, взял Java код у одного Download manager-а

<script TYPE="text/javascript" LANGUAGE="JavaScript1.2">

alert(external.menuArguments.document.URL);
var DMCOMObj = new ActiveXObject("GoRSDN.ContextItem");
if(DMCOMObj)
{
  var dmEvent = external.menuArguments.event;
  var dmDoc = external.menuArguments.document;

  var dmElement = dmDoc.elementFromPoint(dmEvent.clientX, dmEvent.clientY);
  var dmAnchor = dmElement;
  var URL = "";
  while(dmAnchor.tagName!="HTML" && dmAnchor.tagName!="A" && dmAnchor.tagName!="AREA")
  {
    dmAnchor=dmAnchor.parentElement;
  }
  if(dmEvent.type=="MenuExtUnknown" || dmEvent.type=="MenuExtImage" || dmEvent.type=="MenuExtAnchor")
  {
    if(dmAnchor.tagName=="A" || dmAnchor.tagName=="AREA") {URL = dmAnchor.href;}
    if(dmElement.tagName=="IMG" && dmAnchor.tagName=="HTML") {URL = dmElement.src;}
  }
  if(URL!="")
  {
    var refererURL = external.menuArguments.document.URL;
    DMCOMObj.Run("external.menuArguments");
  }
}
else
{
  alert("ActiveX automation object placed in DMIE.DLL is not registered or corrupted. Please try reinstall Download Master");
}
</SCRIPT>



Скрипт извлекает URL элемента, по которому кликнули.
Создает объект
GoRSDN.ContextItem
COM объект взял с ]]>http://www.rsdn.ru/article/qna/inet/iecmenu.xml]]>

Он реализован в VC++ 6:
STDMETHODIMP CContextItem::Run( LPDISPATCH pDispatch )
{
        WinExec(”c:\\windows\\system32\\calc.exe”,SW_SHOW);
    // iieo?aai iauaeo window
    CComQIPtr<IHTMLWindow2> pWindow = pDispatch;
    if ( pWindow )
    {
                // Iieo?aai oaeno auaaeaiey
            CComPtr<IHTMLDocument2> pDoc;
                CComPtr<IHTMLSelectionObject> pSel;
                CComPtr<IDispatch> pDisp;
                CComQIPtr<IHTMLTxtRange> pRange;
                CComBSTR bsText;

        pWindow->get_document( &pDoc );
                if (pDoc == NULL)       return E_FAIL;

        pDoc->get_selection( &pSel );
                if (pSel == NULL)   return E_FAIL;

        pSel->createRange( &pDisp );
                if (pDisp == NULL)  return E_FAIL;
        
                pRange = pDisp;
                if (pRange == NULL) return E_FAIL;
        pRange->get_text( &bsText ); // a bsText - oaeno auaaeaiey !!!


                // Ioe?uaaai ?acoeuoaou iienea a iiaii ieia            
                CComBSTR sUrl = L"http://www.rsdn.ru/cgi-bin/search.exe?query=";
                sUrl+=bsText;
                CComPtr<IHTMLWindow2> pnewWindow;              
        
        pWindow->open( sUrl, L"_blank", L"", FALSE, &pnewWindow);


        return S_OK;
    }

    return E_FAIL;
}



У меня есть вопрос: Как подправить метод Run так, чтоб он принимал url как параметр,
сохранял в реестр, запускал мою программу.
ИЛИ В RUN извлекать url и аналогично передавать его моей программе

Моя программа написана в Delphi.

PS Я реализовал все это без COM, на яве сохраняя в реестр и запуская мою прогу, но в висте
получил предупреждение безопасности.
sad.gif

Прошу помощи в данном вопросе, так как угробил уйму времени на поиски,
пересмотрел все Open Source Download Manager-ы и не получил результата.