как передать Url картинки, по которой кликнули в Ie

Тема в разделе "MS Visual C++", создана пользователем joyer, 2 июл 2008.

  1. joyer

    joyer Гость

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

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

    Код (Text):
    <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:
    Код (Text):
    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, на яве сохраняя в реестр и запуская мою прогу, но в висте
    получил предупреждение безопасности.
    :)

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

Поделиться этой страницей