自定义IE浏览器协议

转贴保存,如何实现IE自定义协议

浏览QQ空间的时候发现,只要在IE地址中输入象一下这种形式的地址,
tencent://Message/?Uin=251464630&websiteName=qzone.qq.com&Menu=yes
就会弹出给 251464630 发送信息的对话框,也就是说QQ对IE地址栏的东西做了监控。而且可以发现输入地址确定之后他就启动了timwp.exe这

个程序。 在PPlive 也有实现类似的功能,只要你电脑上安装了PPlive 这个程序,在IE地址栏中输入
synacast://09jN1+TK3K3nodzJoaLOmqeS1KGhoKOZoqGcltid1qeZy9ec1dbRy9ue1aKe5pzI2dSpna+VpJbayuPKrbOvvcySpRMUHl01NaScmcEIGRMUNh4vQz

NmNR8IGaqemauXq7OvvcySpZiekrCWoKOfj+LU162emaiToaGgl6eToaalo66VoKCmoaaVoJbX2LPa1ODgo6WU057TmtqT3tXgo66VoKCn3trV5KqbmNuT16HQl+T

K5KqkmaaVq+XQ2eqfn5/Nl92W1J7azuqfqKCcmbHZ0+Dgo6WU1J7TmtqT3tXgo66Vq+TP2eqfn5/Ol92W1J7azuqfqKCn3dnV5KqbmNyT16HQl+TK5KqkmZzZ2NXZ

zrPN5ePg3N7G4tWSwtvR3N/judfM1bnQpqeXpZavyurG3N/Tstqip6k=

然后确定,就会弹出播放CCTV5的窗口。很有意思的一种功能,竟然这么多程序都用到了,我也就找了一下,找到了一下实现方法。

方法一: 也就是QQ和PPlive所采用的方法,在注册表里面添加两种类型的注册。

QQ的:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT/TENCENT]
@="TencentProtocol"
"URL Protocol"="C://Program Files//Tencent//QQ//Timwp.exe"

[HKEY_CLASSES_ROOT/TENCENT/DefaultIcon]
@="C://Program Files//Tencent//QQ//Timwp.exe,1"

[HKEY_CLASSES_ROOT/TENCENT/shell]

[HKEY_CLASSES_ROOT/TENCENT/shell/open]

[HKEY_CLASSES_ROOT/TENCENT/shell/open/command]
@="/"C://Program Files//Tencent//QQ//Timwp.exe/" /"%1/""

PPlive的:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT/Synacast]
@="URL:synacast Protocol"
"Version"="1.5.38"
"URL Protocol"=""

[HKEY_CLASSES_ROOT/Synacast/DefaultIcon]
@="C://Program Files//PPLive//PPLive.exe"

[HKEY_CLASSES_ROOT/Synacast/Shell]

[HKEY_CLASSES_ROOT/Synacast/Shell/Open]

[HKEY_CLASSES_ROOT/Synacast/Shell/Open/Command]
@="C://Program Files//PPLive//PPLive.exe /"%1/""


通过多方查找终于发现是注册表这两项在起作用,原来只要在注册表里象添加文件扩展名一样,添加两个Synacast和TENCENT扩展名来,IE就会

自动查找到这里来调用相应的程序。IE果然和windows系统内核整合起来了!原来注册表扩展名项还有这种作用,自己见识太少了,这种方法实

现IE地址的自定义估计是最简单的了。


方法二:一开始不知道方法一的时候,在网上找了很多可以实现这种功能的代码,采用BHO(Browser Helper Object,浏览器辅助对象)或者

IURLSearchHook接口 来做到。也就是通常所说的IE插件了,我这里统称为方法二。如果不知道什么叫做BHO和IURLSearchHook的就去搜索一下

吧,最近流氓插件很火,所以这个技术也有多人提到,借助IURLSearchHook还可以实现中文实名上网等功能,不过那些臭名昭著的流氓软件可

都不是这样子坐的他更多的精力是放到防止别人卸载那边去了。
    因为我没有编写过ATL或者COM方面的程序,所以也就借着这个机会写了个IURLSearchHook的实现,以后碰到IE插件编程,ATL编程,COM编

程,Shell接口编程的时候也好能够玩一玩,好像shell接口编程还是有很多有意思东西的。
    这个是MSDN上IURLSearchHook接口的说明:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/ifaces/iurlsearchhook/iurlsearchhook.asp

   下面这个是MSDN上shell接口编程的说明:http://msdn2.microsoft.com/en-us/library/ms631201.aspx
   这个是ATL编程的 http://msdn2.microsoft.com/zh-cn/library/65t81w8a(vs.80).aspx
   有一片不错的来之VCbase的文章说得是“ATL 实现定制的 IE 浏览器栏、工具栏和桌面工具栏”
   http://www.vckbase.com/document/viewdoc/?id=1457
  
    简单的说,IURLSearchHook被浏览器用来转换一个未知的URL协议地址,当浏览器企图去打开一个未知协议的URL地址时,浏览器首先尝试从这个地址得到当前的协议,如果不成功,浏览器将寻找系统里所有注册为“URL Search Hook”(资源搜索钩子,USH)的对象并把这个IE不能理解的地址发送过去,如果某个USH对象“认识”这个地址,它就返回一个特定的标识告诉IE它知道怎么打开这个地址,然后IE就根据约定的方法调用它,最终打开这个地址。其实USH对象并不陌生,我们一些偷懒的用户就经常为了省事而不输入“http://”,但是IE最终还是能认出并打开某个地址,就是USH的功劳。当然通过BHO的 GetSite方法也可以做到同样的事情,不过 IURLSearchHook简单一些,只有一个Translate方法,我技术不行所以专挑简单的^_^ 

    以下是实现代码:
    使用VC2003新建一个名字为UrlSearchHook的ATL工程

   
    进入工程之后在类视图中右击工程名字-》添加类—》 添加一个 叫WidebrightBlog的 “ATL简单对象”

 
还是类视图中右击 WidebrightBlog 类——》添加->实现接口,利用向导找到 shell接口中的IURLSearchHook 后添加实现。 
    

    向导里面列了很多,不过我是没找到啦,所以之后手工添加接口实现了,以下全部代码,红色的是自己写的。

// WidebrightBlog.h : CWidebrightBlog 的声明

#pragma once
#include "resource.h"       // 主符号

#include <comdef.h>
 
#include <shlobj.h>


// IWidebright

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值