IE里的探索之定制浏览器好助手(中1)

IE里的探索之定制浏览器好助手(中)
(作者:青苹果工作室编译 2001年02月08日 14:00)
检测调用者
  像前面提到的,如果你运行的外壳版本不低于471,BHO 就既能被Internet Explorer又能被Windows Explorer引用。在这个例子里,我们要是涉及一个专对 HTML 页面起作用的助手对象,所以它应该对 Windows Explorer 不起任何作用。一个不想被特定的调用者加载的 DLL 可以在它发现谁是调用者后,简单地在它的 DllMain() 函数中返回 False。当你将 NULL 作为 API 函数 GetModuleFileName() 的第一个参数调用它时,它返回调用 DLL 的模块名。这个参数是你想知道名字的模块的句柄。NULL 表示你想知道调用 DLL 的进程的名字。
  if (dwReason == DLL_PROCESS_ATTACH)
  {
   TCHAR pszLoader[MAX_PATH];
   GetModuleFileName(NULL, pszLoader, MAX_PATH);
   _tcslwr(pszLoader);
   if (_tcsstr(pszLoader, _T("explorer.exe")))
   return FALSE;
  }
  你知道了进程的名字,你就能在它是 Windows Explorer 时退出加载过程。注意采取更严格的淘汰是很危险的。实际上,其它进程可能视为一个正常的原因调用它但被拒绝。第一个受害者是 regsvr32.exe,这个程序用来自动注册对象。如果 你是用不同的测试条件,比如说,只允许 Internet Explorer 可以执行:
   if (!_tcsstr(pszLoader, _T("iexplore.exe")))
  你就不能注册 DLL 了。实际上,当 regsvr32.exe 试图加载 DLL 以调用DllRegisterServer() 函数时,调用被拒绝。
同 WebBrowser 建立联系
  SetSite() 方法是 BHO 进行初始化以及所有只进行一次任务的地方。当你用 Internet Explorer 浏览 URL 时,你需要等待一对事件以确保所需的文档被完全下载并被初始化。只有在这一位置上你能通过可能存在的对象模型安全地访问它的 内容。这表示你需要获得一对指针。第一个是指向 IWebBrowser2 的,它是处理 WebBrowser 对象的接口。第二个指针和事件有关。这个模块必须注册为浏览器的事件监听者,以便能够接收关于下载和文档相关事件的通知。通过使用 ATL 的灵巧指针:
  CComQIPtr<IWebBrowser2, &IID_IWebBrowser2> m_spWebBrowser2;
  CComQIPtr<IConnectionPointContainer,
     &IID_IConnectionPointContainer> m_spCPC;

时间: 2024-10-22 21:39:08

IE里的探索之定制浏览器好助手(中1)的相关文章

IE里的探索之定制浏览器好助手(上1)

IE里的探索之定制浏览器好助手(作者:青苹果工作室编译 2001年02月08日 14:00) 有些情况下你需要特制的.或多或少有些改变的浏览器.这种情况下,你有时候会基于 WebBrowser 控件开发一个完全定制的模块,实现按钮.标题以及用户界面需要的其它东西.这时,你可以自由地在这个浏览器中添加任何新的.非标准的功能.WebBrowser 控件只是浏览器的语法分析引擎.这就是说还有很多用户界面相关的任务必须由你完成:添加地址栏.工具条.历史.状态栏.频道和收藏夹等等.所以,要创建定制的浏览器

IE里的探索之定制浏览器好助手(上2)

IObjectWithSite 接口 从这个高层来看待浏览器助手对象,一个概念就清晰的显现出来了:BHO 是一个动态连接库 (DLL),它能附着在 Internet Explorer 的一个新实例上,在某些情况下,也能附着在 Windows Explorer 的实例上.这样的模块能通过容器的现场与浏览器建立联系. 通常,现场是指处于容器和每个被包含的对象之间的中介对象.容器通过它管理包含的对象,并随后使对象的内置功能可用.这种容器和对象之间的基于现场的关系涉及到在容器一端实现像 IOleClie

IE里的探索之添加浏览器栏

IE里的探索之添加浏览器栏(作者:青苹果工作室编译 2001年02月08日 13:28) 本文解释如何在 Microsoft Internet Explorer 中添加浏览器栏.如果你想向 Internet Explorer 的"工具"菜单中添加菜单项,首先应该熟悉注册表,还应该熟悉 band 对象.有关 band 对象的详细内容,可以参阅 SDK 中关于 Windows Shell API 的文档. 这里讨论的实现方式对 Internet Explorer 5 以上版本有效.关于如何

IE里的探索(想定制自己的IE的可以看一看)

IE里的探索(作者:青苹果工作室编译 2001年02月08日 14:06) Microsoft公司的Internet Explorer已经成为我们机器中必备的工具,只要一打开计算机,只要一上网,怎么会不双击那熟悉的E图标?但是我们对它的了解也许只停留在冰山一角的程度,我们希望添加.定制特殊的功能,以实现更加实用.更加强大的功能.本文就将全面介绍关于IE的高级定制功能,让我们更加充分地发挥其作用! 本文包括如下各节: 浏览器概览 向标准上下文相关菜单里添加条目 添加浏览器栏 添加工具条按钮 创建具

IE里的探索之浏览器概览

IE里的探索之浏览器概览(作者:青苹果工作室编译 2001年02月08日 13:28) 本节解释Microsoft Internet Explorer 4.0及更高版本的体系结构并提供使用它的组件时用到的信息,包括以下内容:* 体系结构概览:* 选择正确的组件:* 提供附加控制:* 控制上下文相关菜单:* 扩展动态 HTML 对象模型:* 控制下载:* 安全管理.体系结构概览 Internet Explorer 使用 Microsoft ActiveX 控件和 Active Document 接

IE里的探索之添加工具条按钮(1)

IE里的探索之添加工具条按钮(作者:青苹果工作室编译 2001年02月08日 13:28) 本文解释如何在 Microsoft Internet Explorer 的用户界面上添加工具条按钮.工具条按钮可以运行 Win32 应用程序.运行脚本或打开浏览器栏.注意:默认情况下,自定义工具条按钮不出现在 Internet Explorer 的工具条上.这些按钮将出现在"定制工具条"对话框的左侧. 如果你想向 Internet Explorer 中添加工具条按钮,就应该熟悉注册表和全局唯一标

在应用程序里识别UserAgent对应的浏览器

ASP.Net有很好的机制来识别用户的浏览器: 用Request.Browser就可以拿到一个 HttpBrowserCapabilities,然后用相应的属性可以取到值,比较浏览器类型,屏幕大小,JS支持等等. 对于移动设备更可以这么用,很容易拿到需要的属性(当然ASP.Net自带的浏览器库还是很不全). 但是怎样在WinApp里根据UserAgent识别浏览器呢?我通过Reflector看到主要是在 BrowserCapabilitiesFactory这个类中对浏览器的Capability进

IE里的探索之向标准上下文相关菜单里添加条目

IE里的探索之向标准上下文相关菜单里添加条目(作者:青苹果工作室编译 2001年02月08日 13:28) 本文描述在Microsoft Internet Explorer中执行URL指定的脚本时,如何向它的标准上下文相关菜单中添加菜单项. 如果你想向 Internet Explorer 的标准上下文相关菜单中添加菜单项,那么你应该熟悉注册表以及上下文相关菜单.有关上下文相关菜单的详细内容,可以参阅 SDK 中关于 Windows Shell API 的文档. 这里讨论的实现方式对 Intern

android源码探索之定制android关机界面的方法_Android

本文实例讲述了android源码探索之定制android关机界面的方法.分享给大家供大家参考.具体如下: 在Android系统中,长按Power键默认会弹出对话框让你选择"飞行模式","静音","关机"等功能.如下图所示: 但这些功能都对Android-x86和其他终端产品就没什么必要了.本文就简单介绍下如何定制关机界面. 我的目标是长按Power键,将会关机,弹出"设备将要关机"选择对话框.如果可以选择"是&quo