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