您所在的位置:首页 - 热点 - 正文热点

问道招财宝树

嘉禄
嘉禄 05-27 【热点】 608人已围观

摘要###BHO(浏览器帮助对象)编程简介与实践指南浏览器帮助对象(BrowserHelperObject,BHO)是微软的一种技术,用于增强和修改InternetExplorer浏览器的行为。BHO允许

BHO(浏览器帮助对象)编程简介与实践指南

浏览器帮助对象(Browser Helper Object, BHO)是微软的一种技术,用于增强和修改Internet Explorer浏览器的行为。BHO允许开发者以插件的形式集成到浏览器中,拓展其功能。尽管Internet Explorer已经逐渐被其他浏览器替代,但是理解BHO的基础概念和原理仍然有助于理解浏览器扩展的开发原理。

什么是BHO?

BHO是一个动态链接库(DLL),它可以被Internet Explorer加载并运行。BHO主要用于增强IE浏览器的功能,比如添加工具栏、修改页面内容、拦截浏览器事件等。BHO可以通过COM接口来与IE浏览器进行交互。

BHO的应用场景

1.

工具栏扩展

:在IE浏览器中添加自定义的工具栏,用于快速访问特定功能或服务。

2.

广告屏蔽器

:拦截和过滤网页中的广告内容。

3.

表单自动填充

:自动填写表单内容,提高用户体验。

4.

网页内容修改

:在网页加载完成后,修改或替换部分网页内容。

5.

URL跳转拦截

:拦截特定的URL请求,实现安全策略或增加用户控制。

6.

安全工具

:增强浏览器的安全性,比如阻止特定的恶意网站或脚本。

BHO的基本实现步骤

要开发一个BHO,通常需要以下步骤:

1.

创建COM组件

:编写一个实现了`IObjectWithSite`接口的COM组件。这个接口允许BHO获取到IE浏览器的`IWebBrowser2`接口,从而获取和操作浏览器的对象模型。

2.

注册BHO

:将编写好的BHO注册到Windows注册表中。注册表的相关项位于 `HKEY_CLASSES_ROOT\CLSID\{BHO的GUID}` 下。

3.

实现BHO的功能

:根据需求实现BHO的具体功能,比如监听浏览器事件、修改页面内容、添加工具栏等。

示例:创建一个简单的BHO

下面是一个简单的BHO示例,它可以在IE浏览器中显示一个自定义的工具栏。

```cpp

include

include

include

include

const GUID CLSID_MyBHO = { /* Your BHO's GUID here */ };

class CMyBHO : public IObjectWithSite, public IOleCommandTarget

{

private:

ULONG m_refCount;

CComPtr m_spWebBrowser;

public:

CMyBHO() : m_refCount(0)

{

}

// IUnknown methods

STDMETHODIMP QueryInterface(REFIID riid, void **ppv)

{

*ppv = NULL;

if (IsEqualIID(riid, IID_IUnknown))

*ppv = static_cast(this);

else if (IsEqualIID(riid, IID_IObjectWithSite))

*ppv = static_cast(this);

else if (IsEqualIID(riid, IID_IOleCommandTarget))

*ppv = static_cast(this);

if (*ppv)

{

AddRef();

return S_OK;

}

return E_NOINTERFACE;

}

STDMETHODIMP_(ULONG) AddRef()

{

return InterlockedIncrement(&m_refCount);

}

STDMETHODIMP_(ULONG) Release()

{

ULONG ref = InterlockedDecrement(&m_refCount);

if (ref == 0)

delete this;

return ref;

}

// IObjectWithSite methods

STDMETHODIMP SetSite(IUnknown *pUnkSite)

{

if (pUnkSite != NULL)

{

HRESULT hr = pUnkSite>QueryInterface(IID_IWebBrowser2, (void **)&m_spWebBrowser);

if (SUCCEEDED(hr))

{

// TODO: Create and add your custom toolbar here

}

}

else

{

// Release any references to IWebBrowser2

m_spWebBrowser.Release();

}

return S_OK;

}

STDMETHODIMP GetSite(REFIID riid, void **ppvSite)

{

if (m_spWebBrowser)

return m_spWebBrowser>QueryInterface(riid, ppvSite);

return E_FAIL;

}

// IOleCommandTarget methods (optional)

STDMETHODIMP QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText)

{

return E_NOTIMPL;

}

STDMETHODIMP Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut)

{

return E_NOTIMPL;

}

};

// DllMain

BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)

{

return TRUE;

}

// DllRegisterServer

STDAPI DllRegisterServer()

{

HRESULT hr = E_FAIL;

// Register as BHO

hr = RegisterCLSIDInProcServer(CLSID_MyBHO, _T("MyBHO Class"), _T("YourModule.dll"));

// Register BHO with Internet Explorer

if (SUCCEEDED(hr))

{

hr = RegisterBHOWithBrowser(CLSID_MyBHO, _T("MyBHO Class"), _T("YourModule.dll"));

}

return hr;

}

// DllUnregisterServer

STDAPI DllUnregisterServer()

{

HRESULT hr = E_FAIL;

// Unregister as BHO

hr = UnregisterCLSIDInProcServer(CLSID_MyBHO);

// Unregister BHO with Internet Explorer

if (SUCCEEDED(hr))

{

hr = UnregisterBHOWithBrowser(CLSID_MyBHO);

}

return hr;

}

```

注册BHO到系统

要使BHO生效,需要在注册表中注册相应的COM组件。以下是注册和取消注册的步骤:

注册BHO

```bash

regsvr32 YourBHO.dll

```

取消注册BHO

```bash

regsvr32 /u YourBHO.dll

```

BHO的注意事项

稳定性与安全性

:BHO会影响浏览器的行为,不正确的实现可能导致浏览器崩溃或安全漏洞。务必进行充分的测试和安全审查。

性能问题

:不良的BHO实现可能导致浏览器性能下降。

兼容性

:BHO在不同版本的IE中表现可能不同,需要进行兼容性测试。

总结

BHO提供了一种在Internet Explorer浏览器中增加和修改功能的灵活途径。开发BHO需要熟悉COM编程、IE浏览器对象模型以及注册表操作。虽然IE的使用逐渐减少,但理解BHO的开发仍然对于理解浏览器插件和扩展有很大帮助。

Tags: 使命召唤5僵尸 白色相簿游戏 鲁宾逊漂流记游戏 同花顺手机炒股软件

最近发表

icp沪ICP备2023033053号-25
取消
微信二维码
支付宝二维码

目录[+]