璐村惂鐢ㄦ埛_0QG84eR馃惥 -
关注数: 4 粉丝数: 0 发帖数: 63 关注贴吧数: 0
高难:神秘莫测的NewWindow2! 问题的起源:设置自己喜欢的浏览器为系统绝对默认的浏览器。(修改.http等关联不是重点)探索过程:请看测试程序1:Private Sub Form_Load()WebBrowser1.Navigate "www.sina.com.cn"End Sub就这么一行代码,其他不做任何处理。当WebBrowser1打开网页后,随便点一个会打开新窗口的超链接,这个时候会发生什么事情?通常情况是IE打开了这个窗口。我们都知道新窗口是在WebBrowser1_NewWindow2事件中发生的,但为什么会打开IE呢?那一定是通过某种途径通知了IE。继续研究,发现通知到这里:HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{0002DF01-0000-0000-C000-000000000046}\LocalServer32起值="C:\Program Files\Internet Explorer\iexplore.exe"调用的方式大约是Shell C:\Program Files\Internet Explorer\iexplore.exe -Embedding为了证明我的猜测,请看测试程序2:Private Sub Form_Load()MsgBox CommandEnd Sub用以监视调用参数,将其编译为c:\app2.exe,然后将上述注册表的值修改为c:\app2.exe,再在测试程序1中随便点一个会打开新窗口的超链接,这个时候又会发生什么事情?没有打开IE了,app2.exe执行了,并且MsgBox显示-Embedding,由此证明了调用的流程:没有处理WebBrowser1_NewWindow2的情况下,调用了HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{0002DF01-0000-0000-C000-000000000046}\LocalServer32所指向的程序,带参数-Embedding那问题就来了,当LocalServer32=IE或MT的时候,IE和MT等浏览器为什么能正确打开呢?请注意这里带的参数是-Embedding而并不是暴露的URL地址。似乎唯一的解释就是IE和MT等在发现带-Embedding这个参数调用的时候从某个接口等获得了WebBrowser1_NewWindow2的ppDisp或URL。而我们自己写的程序如何做到这一点呢?就象上面的测试程序2,当检测到-Embedding这个参数的时候如何正确打开呢?请各路英雄详加指点,不胜感激!-----------------------------------------------------别人对我的有用的回复:http://support.microsoft.com/kb/q160957/-----------------------------------------------------但我实在实现不了,无法检测到DDE……
1 下一页