D
dos1234
Unregistered / Unconfirmed
GUEST, unregistred user!
偶在用Delphi弄IE地址栏搜索扩展时(是基于IURLSearchHook的),当注册完DLL时,IE能够加载dll,为什么不能调用里面的实例呢,而又用VC6.0重写一个DLL时,却可以正常使用,真是狂郁闷中,测试了2天都没有结果,难道是偶对Type Library和Com Object里的设置和初始不正确所致,还望路过的兄弟们给点提示!
附:
1. 我写的测试代码(Delphi和VC各一份)下载地址:
http://d3soft.host.idc163.cn/temp/IESearchEx.rar
2. 关于什么是IE地址栏搜索扩展
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.delphibbs.com
这个网址解析成功,就会跳转到该站点。如果不存在这个域名,那么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的字符串的值。
附:
1. 我写的测试代码(Delphi和VC各一份)下载地址:
http://d3soft.host.idc163.cn/temp/IESearchEx.rar
2. 关于什么是IE地址栏搜索扩展
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.delphibbs.com
这个网址解析成功,就会跳转到该站点。如果不存在这个域名,那么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的字符串的值。