新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论.NET,C#,ASP,VB技术
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 Dot NET,C#,ASP,VB 』 → Visual C#两分钟搭建BHO IE钩子 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 8443 个阅读者  浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: Visual C#两分钟搭建BHO IE钩子 举报  打印  推荐  IE收藏夹 
       本主题类别: Description Logics    
     卷积内核 帅哥哟,离线,有人找我吗?
      
      
      威望:8
      头衔:总统
      等级:博士二年级(版主)
      文章:3942
      积分:27590
      门派:XML.ORG.CN
      注册:2004/7/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给卷积内核发送一个短消息 把卷积内核加入好友 查看卷积内核的个人资料 搜索卷积内核在『 Dot NET,C#,ASP,VB 』的所有贴子 访问卷积内核的主页 引用回复这个贴子 回复这个贴子 查看卷积内核的博客楼主
    发贴心情 Visual C#两分钟搭建BHO IE钩子

    微软在1997年正式推出Browser Helper Object (BHO), 使程序员能够更好的对IE进行二次开发和操作. 在通过编写BHO程序数月后, 我希望把我的一些经验告诉才开始的同志, 避免走一些弯路.

    我本人是非常喜欢C++的. 因为C++对内存直接操作的方式可以节省非常多的内存损耗, 也更快一些. 但是在开发BHO的时候, 我的确也认识到, C#明显要比C++强大很多. 例如C#提供的FOREACH 循环就可以避免FOR循环产生的溢出. 另外C#的类型转换也明显要强于C++. 毕竟BHO和C#都是出自微软一家, 理所当然, C#更适合BHO开发一些. 我的第一个BHO程序是用C++写的. 对于COM的操作,让我至少弄了几天才搞清楚他们到底想干什么. 但是我的第一个C# BHO程序只用了几分钟就搭建好了钩子. 如果你希望从事BHO开发, 而且你才开始学. 我想这篇文章对您有点帮助.

    下面就让我们开始.

    首先我们需要在C#中新建一个DLL工程. 因为BHO是通过让IE调用DLL来驱动的. 我用的是VC# EXPRESS. 因为这已经完全够用了. VC# PROFESSIONAL 并不需要, 而且还很浪费内存.


    按此在新窗口浏览图片

    当我们建立一个空工程以后, 随便添加一个文件夹叫BHO, 然后添加一个文件.

    按此在新窗口浏览图片


    需要我们注意的是, 我们这个文件必须被命名为IObjectWithSite.cs因为这样IE才知道这是一个BHO程序. 如果想知道更多关于IObjectWiteSite接口的内容, 请查询MSDN[URL=http://msdn2.microsoft.com/en-us/library/Aa768220.aspx] http://msdn2.microsoft.com/en-us/library/Aa768220.aspx[/URL]

    在IObjectWithSite中必须有两个方法GetSite和SetSite. 我们主要是对后者进行调用.通过名字大家就可以猜到他们是干什么的.

    [URL=http://msdn2.microsoft.com/en-us/library/aa768219.aspx]GetSite[/URL]:  Gets the last site set with [URL=http://msdn2.microsoft.com/en-us/library/aa768221.aspx]IObjectWithSite::SetSite[/URL]. If there is no known site, the object returns a failure code.

    [URL=http://msdn2.microsoft.com/en-us/library/aa768221.aspx]SetSite[/URL]:  Provides the site's [URL=http://msdn2.microsoft.com/en-us/library/ms680509.aspx]IUnknown[/URL] pointer to the object.

    请把VS STUIDO 默认的类名给去掉.因为IObjectWithSite并不是一个类, 而是一个接口.

    按此在新窗口浏览图片

    不要忘记添加 System.Runtime.InteropServices

    按此在新窗口浏览图片

    下面我们再添加剂一个叫BHO.CS的主文件.

    按此在新窗口浏览图片
    这个新建的类是基于 IObjectWithSite接口的. 正如同我前面讲的. 你就是通过这个接口来调用IE.

    按此在新窗口浏览图片


    为了使用微软的BHO库.我们必须添加下面两个库: SHDocVw and MSHTML.他们一般都在 Windows\System32 下面

    SHDocVw is  Microsoft Shell Doc Object and Control Library

    MSHTML is:   All interfaces for accessing the Dynamic HTML (DHTML) Object Model are based on [URL=http://msdn2.microsoft.com/en-us/library/ms221608.aspx]IDispatch[/URL] and are the basis of access to the object model that is also used by scripts. http://msdn2.microsoft.com/en-us/library/bb498651.aspx


    按此在新窗口浏览图片

    光using SHDocVw" 是不够的, 你需要添加

    按此在新窗口浏览图片
    按此在新窗口浏览图片

    Add SHDocVw

    按此在新窗口浏览图片
    因为稍后我们需要用到MESSAGEBOX, 所以这里我也添加了一个WINDOWS FORM库


    按此在新窗口浏览图片

    下面添加两个变量: WebBrowser and HTMLDocument. 就如同他们的名字. 一个是IE的变量, 另外一个是IE所访问的HTML页变量.

    下面在这个类中田间一个叫 OnDocumentComplete 的函数. 取其他名字也行, 没什么太大关系. 但是这里为了CODE的可用性,我们叫OnDocumentComplete. 这个函数实际上是和CDHTMLDIALOG下面的OnDocumentComplete所对应的.

    CDHtmlDialog Class http://msdn2.microsoft.com/en-us/library/8bed8k60(VS.80).aspx .

    OnDocumentComplete的触发是在一个HTML页被LOAD完以后. 你也可以避免用Navigate() or OnBeforeNavigate(). 他们表示在发出访问和访问之前触发.

    Please refer to http://msdn2.microsoft.com/en-us/library/8k5z3ekh(VS.80).aspx to find out what you need exactly.

    按此在新窗口浏览图片

    在 IObjectWithSite.cs下,你需要找出IE的GUID, 这样才方便注册表的更改.

    按此在新窗口浏览图片

    另外你需要给自己的程序添加一个GUID. 这样IE才能在注册表中找到你的信息. 你可以使用System.Guid.NewGuid() method 来得到一个GUID. 这比C++得到GUID的方法要容易得多了.

    按此在新窗口浏览图片


       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    事业是国家的,荣誉是单位的,成绩是领导的,工资是老婆的,财产是孩子的,错误是自己的。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2010/9/28 8:59:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2025/6/3 20:09:53

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    8,648.438ms