高难:神秘莫测的NewWindow2!
vb吧
全部回复
仅看楼主
level 1
问题的起源:设置自己喜欢的浏览器为系统绝对默认的浏览器。(修改.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……
2007年08月29日 14点08分 1
level 10
连-Embedding参数你都可以猜出来 你太有才拉
2007年08月29日 15点08分 2
level 10
实际上只要设置一个默认浏览器就可以了[HKEY_CLASSES_ROOT\HTTP\shell\open\command]@="你的浏览器路径"
2007年08月29日 15点08分 3
level 10
另外还要处理command参数这个参数就是一个url
2007年08月29日 15点08分 4
level 0
各位,检测到的参数只有-Embedding!至于HKEY_CLASSES_ROOT\HTTP\shell\open\command,这个我知道,但针对目前的问题,这个根本不是关键
2007年08月30日 07点08分 5
level 10
要想知道-Embedding参数的秘密 只有看IE的源码我猜IE也是处理的NewWindow2 来打开的新窗口embedding的参数应该另有其他作用或许这个只是一个标志
2007年08月30日 10点08分 6
level 10
实际上IE的多窗口和一般的多页浏览器有所不同打开的新窗口并不是孤立的他们都通过系统接口 相互协作 也就是说如果网站需要 这些窗口之间可以相互通讯
2007年08月30日 10点08分 7
level 0
这里说得清楚点http://community.csdn.net/Expert/topic/5726/5726382.xml?temp=.7382624请各位帮忙
2007年08月30日 14点08分 8
level 0
你的问题是你想要达到什么目的或效果呢?我发现用了参数-Embedding调用IE时,IE调用的DLL要比直接调用IE时少很多。
2007年10月19日 15点10分 9
level 1
[88]同求
2011年12月27日 05点12分 10
1