Здравствуйте, Vit1251, Вы писали:
V>Очень хотелось бы создать свой плугин который висел бы как кнопка в IE и при нажатии выдавал бы MsgBox(URL); Естетвенно MsgBox я заменю на свой плугин... Если кто писал... Плз поделитесь...
Там ничего сложного нету: создаешь COM-объект вот с такими интерфейсами (CIEButton — это для сэмпла, надо реализовать, собственно, IOleCommandTarget и IObjectWithSite):
class ATL_NO_VTABLE CIEButton :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CIEButton, &CLSID_IEButton>,
public IOleCommandTarget,
public IObjectWithSite,
public IIEButton
{
private:
IUnknown* pSomething;
public:
CIEButton()
{
pSomething = NULL;
}
DECLARE_REGISTRY_RESOURCEID(IDR_IEBUTTON)
public:
STDMETHOD(QueryStatus)(const GUID *pCmdGroup, ULONG cCmds, OLECMD prgCmds[],
OLECMDTEXT *pCmdText);
STDMETHOD(Exec)(const GUID *pCmdGroup, DWORD nCmdID, DWORD nCmdExecOpt,
VARIANTARG *pvaIn, VARIANTARG *pvaOut);
public:
STDMETHOD(SetSite)(IUnknown *pUnkSite);
STDMETHOD(GetSite)(REFIID riid, void **ppvSite);
BEGIN_COM_MAP(CIEButton)
COM_INTERFACE_ENTRY(IIEButton)
COM_INTERFACE_ENTRY(IOleCommandTarget)
COM_INTERFACE_ENTRY(IObjectWithSite)
END_COM_MAP()
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}
public:
};
OBJECT_ENTRY_AUTO(__uuidof(IEButton), CIEButton)
Пишешь код COM'ика:
STDMETHODIMP CIEButton::QueryStatus(const GUID *pCmdGroup, ULONG cCmds,
OLECMD prgCmds[], OLECMDTEXT *pCmdText)
{
if (!prgCmds)
return E_POINTER;
if (!cCmds)
return E_UNEXPECTED;
for(UINT i=0;i<cCmds;i++)
prgCmds[i].cmdf = OLECMDF_ENABLED;
return S_OK;
}
//---------------------------------------------------------------------------
STDMETHODIMP CIEButton::Exec(const GUID *pCmdGroup, DWORD nCmdID, DWORD nCmdExecOpt,
VARIANTARG *pvaIn, VARIANTARG *pvaOut)
{
::MessageBox(NULL,"Clicked on button!",NULL,MB_OK);
return S_OK;
}
//---------------------------------------------------------------------------
STDMETHODIMP CIEButton::SetSite(IUnknown *pUnkSite)
{
pSomething = pUnkSite;
return S_OK;
}
//---------------------------------------------------------------------------
STDMETHODIMP CIEButton::GetSite(REFIID riid, void **ppvSite)
{
if(!pSomething)
{
*ppvSite = NULL;
return E_FAIL;
}
return pSomething->QueryInterface(riid, ppvSite);
}
//---------------------------------------------------------------------------
И регистрируешь его:
HKLM
{
NoRemove Software
{
NoRemove Microsoft
{
NoRemove 'Internet Explorer'
{
NoRemove Extensions
{
ForceRemove '{CLSID объекта}'
{
val ButtonText = s 'Текст кнопки'
val MenuText = s 'Текст меню'
val MenuStatusBar = s 'Текст в статусе'
val CLSID = s '{1FBA04EE-3024-11D2-8F1F-0000F87ABD16}'
val ClsidExtension = s '{CLSID объекта}'
val 'Default Visible' = s 'Yes'
val HotIcon = s '%MODULE%,1' // индекс иконки в файле dll
val Icon = s '%MODULE%,1' // индекс иконки в файле dll
}
}
}
}
}
}
Вот и всего делов-то

... << RSDN@Home 1.1.3 stable >>