C++中使用BHO来屏蔽特定网站

BHO(浏览器辅助对象)是一种简单的ATL COM对象,而Internet Explorer会在每次运行时都加载它;换句话来说,即每个Internet Explorer的实例都会加载它。BHO运行在Internet Explorer的地址空间内,能对可访问的对象(如窗口、模块等等)执行任何操作,且因为它依附于浏览器的主窗口,所以其生命期与浏览器实例的生命期一致。

如果在系统中打开了活动桌面,BHO也能随同Windows Explorer一起启动。如果不想在Windows Explorer中运行BHO,可将如下代码添加到DLLMain中:

TCHAR strLoader[MAX_PATH];
::GetModuleFileName (NULL, strLoader, MAX_PATH);
if(stricmp("explorer.exe", strLoader) == 0)
return FALSE;

BHO的COM Server必须实现IObjectWithSite,以便对象可以挂钩到浏览器事件,Internet Explorer会依靠IObjectWithSite将一个指针传递到它的IUnknown接口,所以,只需实现IObjectWithSite的SetSite方法就行了,如下所示:

STDMETHODIMP CBhoApp::SetSite(IUnknown *pUnkSite)
{
 //获取并存储IWebBrowser2指针
 m_spWebBrowser2 = pUnkSite;
 if (m_spWebBrowser2 == NULL)
  return E_INVALIDARG;
 //获取并存储IConnectionPointerContainer指针
 m_spCPC = m_spWebBrowser2;
 if (m_spCPC == NULL)
  return E_POINTER;
 //连接到宿主程序以接收事件通知
 return Connect();
}

以下是Connect函数比较简单的实现:

HRESULT CBhoApp::Connect()
{
 HRESULT hr;
 CComPtr<IConnectionPoint> spCP;
 //获取访问WebBrowser事件的连接指针
 hr = m_spCPC->FindConnectionPoint(DIID_DWebBrowserEvents2, &spCP);
 if (FAILED(hr))
  return hr;
 //把事件处理程序传递给宿主程序Each time an event
 //每次有事件产生时,宿主程序都会调用我们实现的IDispatch接口的函数
 hr = spCP->Advise(reinterpret_cast<IDispatch*>(this),&m_dwCookie);
 return hr;
}

时间: 2024-09-21 16:24:45

C++中使用BHO来屏蔽特定网站的相关文章

谷歌搜索不再支持屏蔽自定义网站

新浪科技讯  北京时间3月25日早间消息,谷歌上周日宣布,将关闭谷歌搜索中的自定义屏蔽网站功能.该功能去年曾短暂消失,几天后又很快恢复. 通过这项功能,用户可以在搜索结果中屏蔽自己不喜欢的域名.虽然该功能并没有在搜索主页中出现,但却可以在搜索偏好页面中自行设置. 谷歌在声明中说:"如果要在搜索结果中屏蔽特定网站,我们建议使用Chrome浏览器的Personal Blocklist扩展程序.你也可以以文本形式下载现已屏蔽的网站列表." 但业内人士认为,谷歌今后还有可能推出其他类似的功能,

如何在Ubuntu中屏蔽一个网站

亲爱的ubuntu极客们, 在本教程中我将教你如何通过编辑/etc/hosts文件来屏蔽在Ubuntu Linux上不受欢迎的网站,这是用来处理DNS和Linux网络的系统文件. 我很喜欢这种方法,因为我不需要依靠第三方应用程序,这是非常容易使用的.您需要做的就是在/etc/hosts文件文件中做一个简单的变化. 请确保您有使用此方法时在机器上处于root用户访问状态,因为/etc/hosts文件文件由root用户拥有的,所以它不能被不被普通用户编辑. 编辑 /etc/hosts 文件您需要什么

用Cisco IOS阻止访问特定网站具体步骤

本文主要介绍了阻止访问特定网站的具体操作步骤,以思科路由2600为例,详细的介绍了具体操作步骤,下面文章将给我们详细的解答.有台Cisco 2600,平时般用作互联网服务器.现在希望可以屏蔽某些特定网站,该怎么做呢? 这不是个困难任务--只要您知道Cisco IOS如何工作的.这里将指导您进行这项工作,并告诉您使这种方式应当注意些什么 .步骤1:配置个DNS服务器假设我们打算屏蔽个名www.itmop.com网站.我们并不知道该网站具体IP地址,而且们也不想知道.没问题--Cisco IOS自己

TL-H39RT怎么限制用户只能访问特定网站和应用?

  企业办公网络环境中,需要对内部办公电脑进行网络权限差异化设置,从而提升办公效率和网络安全.上网控制功能可以对内部主机的上网权限进行控制,实现在不同时间访问不同目标,满足企业用户的需求. 需求分析 某小型企业需要实现经理电脑不受限制,所有员工在上班时间只能访问特定网站和应用,其他时间上网均不限制.根据需求,制定以下配置表: 注意:上数参数仅供参考,在设置规则时,根据实际需求定义. 以下为TL-H39RT限制用户上网行为的具体方法步骤 第一步:设置日程计划 登录路由器管理界面,点击 上网控制 >

调查称过半美国公司屏蔽社交网站

北京时间10月7日上午消息,据国外媒体报道,本周二发布的一项最新调查显示,大多数美国公司都禁止员工访问Facebook.Twitter等社交网站,其中49%的公司完全屏蔽社交网站,另有19%只允许员工因商业目的而使用社交网站. 这项由咨询公司Robert Half Technology进行的调查还显示,只有10%的公司允许员工在工作时随意登录社交网站,而另有16%"有限制地"允许员工出于个人目的登录社交网站. 这项调查的受访对象包括约1400名美国公司的首席信息官,这些公司的雇员数均不

azure-Visual Studio 无法通过Azure门户中下载的发布配置文件进行网站发布

问题描述 Visual Studio 无法通过Azure门户中下载的发布配置文件进行网站发布 我想在VS2013中通过发布配置文件的方式将网站发布到azure上(使用的azure帐户是中国区1元免费订阅). 我从azure门户上将发布配置文件下载下来,然后通过导入发布文件的方式进行发布,但在导入文件时,老是报这样的错:文件xxx不含microsoft azure的有效发布设置.请问一下这个问题怎么解决呢? 解决方案 Hi VS默认是使用的国际版的azure,所以默认在Visual Studio中

java-Java实现自动识别文件夹中图片路径?上传到网站中的 源码,很急

问题描述 Java实现自动识别文件夹中图片路径?上传到网站中的 源码,很急 Java实现自动识别文件夹中图片路径,上传到网站中的 源码,比如,我有一个文件夹,里面有许多图片,需要发布到一个网站 解决方案 你直接复制到服务器不必这个快??? 解决方案二: 这个发布到服务器不是把地址发布到服务器,而是把图片上传的服务器,服务器没有C盘D盘什么的,它是图片上传到服务其的一个指定地址,在把这个地址存入类中对应的数据库字段中,在通过掉用这个地址获得图片,如果是在本地就可以通过String name=fil

csv文件导入到数据库时字段中的分隔符怎么屏蔽

问题描述 csv文件导入到数据库时字段中的分隔符怎么屏蔽 csv文件导入到数据库过程中,字段中有分隔符的情况应该怎么处理呢?维基百科上说应该用双引号包裹,但这样并没有效果.我用的是sql server2012,请大神指教.

azure-一个网站服务中,怎样发布多个子网站啊~

问题描述 一个网站服务中,怎样发布多个子网站啊~ Hello,everybody!!! 我在原来的项目中有3个子网站,我可以在IIS中使用虚拟目录发布,但是Azure中我怎么去操作,有没有这样的方式啊 ??? 求解答!!!!! 解决方案 下一个开源的CMS,里面有源码 解决方案二: 实际配置的时候需要增加不同的IP地址,然后把域名分别对应到IP 解决方案三: 您好, 如果您想问的是虚拟目录或虚拟文件夹的话,windows Azure是可以实现的. 您也可以将您的网站发布到虚拟文件夹中,您可尝试如