自定义IE浏览器协议

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

转贴保存,如何实现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>


// IWidebrightBlog
[
 object,
 uuid("1F0B2F61-221A-456C-A8E1-E0E01796E482"),
 dual, helpstring("IWidebrightBlog 接口"),
 pointer_default(unique)
]
__interface IWidebrightBlog : IDispatch
{
};

 

// CWidebrightBlog

[
 coclass,
 threading("apartment"),
 vi_progid("UrlSearchHook.WidebrightBlog"),
 progid("UrlSearchHook.WidebrightBlog.1"),
 version(1.0),
 uuid("44AA49F1-7E20-472E-A5A4-08D3233D9132"),
 helpstring("WidebrightBlog Class")
]
class ATL_NO_VTABLE CWidebrightBlog : 
  public IWidebrightBlog,
  public IURLSearchHook
{
public:
 CWidebrightBlog()
 {
  // MessageBox(NULL,"在CWidebrightBlog()","widebright ",MB_OK);
&nb

注册自定义URL协议 用过电驴的朋友都知道电驴有这么一个功能,在网页上点击电驴资源的链接,如果你的机器上安装了电驴,那么电驴就会自动启动,然后下载所选的资源。这些日子做项目的时候Boss刚好提了这么个需求,经一位同事指点,研究了一下,原来是酱子实现的。首先查看一下电驴资源的链接,可以看到全部是已ed2k开头的,比如这个:ed2k://|file|06527%E5%A5%87%E8%B6%A3%E5%A4%A 阅读详情

相关推荐

从Chrome跳转到IE浏览器的完整解决方案

本文提供了一套完整的解决方案,实现从Chrome浏览器自动跳转至IE浏览器打开指定页面。方案核心包括:1) 通过Windows注册注册自定义openIE://协议;2) 使用VBS脚本处理URL并启动IE浏览器;3) 前端集成protocolCheck.js进行协议检测;4) 配套安装/卸载脚本实现一键部署。该方案适用于企业环境中需要兼容老旧IE系统的场景,实现了无缝跳转和友好的用户提示。

漫无目的猿猿的博客 1481

IE浏览器 自定义地址协议的实现

    关键字:IE插件,shell接口编程,自定义IE协议,VC2003 ATL 实现COM 浏览QQ空间的时候发现,只要在IE地址中输入象一下这种形式的地址,tencent://Message/?Uin=2

技术资料库 8643

自定义协议浏览器中启动本地应用程序

自定义协议浏览器中启动本地应用程序,是一个完成的DEMO,可以正常实现功能.

自定义外部协议使浏览器拉起本地程序

由于我们的游戏需要在浏览器中调用NPAPI插件,而chrome移除了NPAPI的支持,导致游戏并不能很好的适配所有的浏览器,所以这个时候我们对于chrome浏览器用到了自定义浏览器协议这一标准。自定义浏览器协议允许在浏览器中使用的形式进行调用本地程序。包括在网页上拉起百度云网盘、或者拉起QQ等等等等,都属于自定义浏览器协议。我们的游戏客户端注册表一开始没有在下写入的注册信息,导致在chrome v74及以上浏览器中无法拉起外部程序,而在v74以下则可以拉起。

学习是为了探索这个世界的本质 2963

浅谈浏览器插件检测 和自定义协议的支持

前一阵子一直在折腾浏览器的插件检测和自定义协议的支持。 经过种种痛苦的折腾,算是对这一领域有了点浅显的认知。特此记录一下 一、背景知识自定义协议:常用的协议有 http:// https:// ftp:// 等 然而我们也经常会遇到类似这样的协议连接 thunder:// 迅雷的 item:// itunes的 ed2k:// 电驴的 这样的协议是需要本地计算机安装软件与...

weixin_30685047的博客 361

在chrome浏览器中调用IE浏览器并访问(openIE.reg自定义协议

在谷歌浏览器中有4种方法调用IE浏览器。如下: c++ socket通过浏览器ie中打开指定url ; vb生成exe,url访问exe启动ie并打开指定url ; 通过socket实现通过http调用IE浏览器并打开指定url ; chrome自定义协议。 今天我们就来说一下使用chrome自定义协议打开ie浏览器并访问指定页面。 当然,有很多网友都写过,我这里就借花献佛了。...

songfei_dream的专栏 7037

IE中启动火狐——自定义浏览器链接协议

有时候需求就是这么奇葩,特别是在这个浏览器混战收尾的节骨眼上,有的客户正在将全单位的浏览器统一到Chrome、有的正在统一到Firefox、还有的正在统一到360上。于是就有了如题的需求,客户正在将浏览器统一到某一B浏览器,但是当前系统还运行在A浏览器上,需要在A浏览器所兼容的系统S1中点击某链接,自动用B打开S2系统。 经过查阅资料,得知,可以通过自定义浏览器协...

weixin_30892987的博客 535

IE浏览器自定义地址协议详解(非转载)

类似问题:实现一个类似迅雷下载的功能,用户点击下载链接,如果用户未安装迅雷,则弹出迅雷安装对话框,已经安装迅雷,则要求启动迅雷,并下载用户想要的种子。 核心实现:最近开发客户端程序,被要求实现一个自定义IE地址栏协议,目的是为了通过在IE地址栏中输入一串符合规则的命令,可以达到和客户端程序通信的效果。自己思索良久,并在网上查阅相关资料,发现皆是拷贝,而且内容表述很乱...

weixin_34392435的博客 113

IE浏览器自定义地址协议详解(转载)

要实现IE自定义地址协议,首先应该要在注册表里将协议定义好。如下: 找到注册表里面的HKEY_CLASSES_ROOT项,在里面新建一个 项,我这里取名iDesk,这个项,就是协议的入口,接下来上图: 按照上图格式建项,其中command中数据的值是启动程序入口地址, 这点很重要,这个是你要与之通信的那个程序的安装地址,那么下面我来贴...

weixin_33851177的博客 208

html从谷歌浏览器跳转到IE,IE浏览器和谷歌浏览器相互跳转

在实际使用环境中,部分网站需要使用ie浏览器才能正常使用,我们可以使用自定义协议的方法,打开ie浏览器。在ie浏览器中如果需要跳转到谷歌浏览器的话,可使用 ActionXObject 来进行跳转。一、谷歌浏览器跳转到IE浏览器tip:想要跳转到IE浏览器,使用者的电脑上必须安装IE浏览器我们创建一个注册表,制定协议只要使用这个协议,就会触发注册注册的事件我们只要在注册表事件上调用打开IE浏览器的...

weixin_36096137的博客 5607

在chrome浏览器中打开IE浏览器并访问对应页面(openIE.reg自定义协议

在Chrome浏览器中点击链接,打开IE浏览器,跳转到指定页面并传递参数

sinac的博客 3083

如何实现IE自定义协议

转载于:http://koko.c.blog.163.com/blog/static/2802775320089221011459/ 如何实现IE自定义协议 浏览QQ空间的时候发现,只要在IE地址中输入象一下这种形式的地址, tencent://Message/?Uin=251464630&websiteName=qzone.qq.com&Menu=yes 就会弹出给 251...

爱在深夜 741
上一篇: php如何删除任意指定的数组元素
下一篇: postgresql如何备份与恢复
oulix
博客等级 码龄26年 1粉丝 8原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值