如何实现自定义的URL协议

IURLSearchHook接口
        该接口被浏览器用来转换一个未知的URL协议地址。当浏览器企图去打开一个未知协议的URL地址时,浏览器首先尝试从这个地址得到当前的协议,如果不成功,浏览器将创建在系统中注册的URL Search Hook对象并调用每一个对象的Translate方法,直到地址被转换或所有的URL Search Hook都尝试过。

 

IURLSearchHook的方法:

HRESULT Translate( LPWSTR lpwszSearchURL, DWORD cchBufferSize  );              
参数:

lpwszSearchURL

宽字符的缓冲区地址,方法被调用时。缓冲区内保存着浏览器要解析的URL地址。

如果方法返回S_OK,则缓冲区内保存被解析(修改)的URL地址。

CchButterSize

第一个参数指向的缓冲区的大小,以字节计

 

返回值:

  S_OK: URL被成功转换,lpwszSearchURL包含转换后的URL,浏览器将不会调用其它的URL Search Hook对象。

  S_FALSE: URL被部分处理,但仍然需要解析。LpwszSearchURL包含被处理后的

URL,浏览器将继续调用其它URL Search Hook对象。

  E_FAIL: URL无法转换,LpwszSearchURL没有被修改,浏览器将继续调用其它URL Search Hook对象。

 
 

                                  例如,用户在IE地址栏输入一个网址:www.csdn.net。这个网址解析成功,就会跳转

到该站点。如果不存在这个域名,那么IE就会搜寻系统上注册的URL Search Hook对象

加载并调用它的Translate。如果这个方法返回S_OK,则将返回被解析(修改)的URL

浏览器将打开此URL

                                  你可以利用这个对象,当用户试图打开一个不存在的站点时把URL转向另一个站点。

或者,也可以将用户在地址栏输入的文字以关键字形式打开某个搜索引挚,如在地址栏输入

MP3,就用GOOGLE去搜索MP3。或者,做一个中文实名库,把浏览器转进来的URL到库里匹配,匹配成功后返回正确的URL

 

如何注册一个URL Search Hook对象

                                  要实现一个URL Search Hook,必须在注册表的

HKEY_LOCAL_MACHINE/Software/Microsoft/Internet Explorer/UrlSearchHooks

位置上,创建一个名称为对象CLISID的字符串的值。

                                  注册完可能要重启后才能用。

 

注:当URL xxx:xxx 的形式时,即使解析不成功也不会调用URL Search Hook

                                  只适用于MS-IE浏览器和小数浏览器。

例子参考:

http://www.codeguru.com/Cpp/I-N/ieprogram/article.php/c1243

   2004-11-29

你可能感兴趣的:(浏览器,Google,IE,url,search,hook)