Плагин для Internet Explorer, заменяющий картинки
От: Tasha  
Дата: 11.05.07 12:52
Оценка:
Как написать плагин для IE, который будет заменять картинки на свой значок? Как написать сам плагин понятно, а вот как заменять картинки не могу понять?
Спасибо!!!
Re: Плагин для Internet Explorer, заменяющий картинки
От: Conr Россия  
Дата: 11.05.07 13:22
Оценка:
Здравствуйте, Tasha, Вы писали:

T>Как написать плагин для IE, который будет заменять картинки на свой значок? Как написать сам плагин понятно, а вот как заменять картинки не могу понять?


Если по-простому, то так:
HRESULT GetElementCollection(LPCOLESTR pszTagName, IDispatch* pDocDisp, IHTMLElementCollection** ppColl)
{
    HRESULT hr = E_FAIL;
    CComQIPtr<IHTMLDocument2, &IID_IHTMLDocument2> spHTML(pDocDisp);
    if (spHTML)
    {
        CComPtr<IHTMLElementCollection> spAll;
        hr = spHTML->get_all(&spAll);
        if (SUCCEEDED(hr) && spAll)
        {
            CComVariant vTagName = pszTagName;
            vTagName.ChangeType(VT_BSTR);

            CComPtr<IDispatch> spTagsDisp;
            hr = spAll->tags(vTagName, &spTagsDisp);
            if (SUCCEEDED(hr) && spTagsDisp)
            {
                CComQIPtr<IHTMLElementCollection, &IID_IHTMLElementCollection> 
                    spElems(spTagsDisp);
                if (spElems)
                    hr = spElems.CopyTo(ppColl);
                else
                    hr = E_FAIL;
            }
        }
    }
    return hr;
}

HRESULT ProcessImages(IDispatch* pDocDisp)
{
    CComPtr<IHTMLElementCollection> spElems;
    HRESULT hr = GetElementCollection(L"IMG", pDocDisp, &spElems);
    if (SUCCEEDED(hr) && spElems)
    {
        long nCnt;
        hr = spElems->get_length(&nCnt);
        if (SUCCEEDED(hr))
        {
            for (long i = 0; i < nCnt; i++)
            {
                CComVariant varIdx;
                V_VT(&varIdx) = VT_I4;
                V_I4(&varIdx) = i;

                CComPtr<IDispatch> spItemDisp;
                hr = spElems->item(varIdx, varIdx, &spItemDisp);
                if (SUCCEEDED(hr) && spItemDisp)
                {
                    CComQIPtr<IHTMLImgElement, 
                        &IID_IHTMLImgElement> spImage(spItemDisp);
                    if (spImage)
                    {
                        CComBSTR bsSrc;
                        spImage->get_src(&bsSrc);
                        if (SUCCEEDED(hr) && bsSrc)
                        {
                            CComBSTR newSrc(".....");
                            spImage->set_src(newSrc);
                        }
                    }
                }
            }
        }
    }
    return hr;
}


Если по-нормальному, то писать свой моникер и прямо в нем налету менять html, но, думаю, так углубляться не станете
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.