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

  • Автор темы joyer
  • Дата начала
J

joyer

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

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