Добавить пункт меню в 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-ы и не получил результата.