首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

200分:高难,神秘莫测的NewWindow2!解决方案

2012-03-30 
200分:高难,神秘莫测的NewWindow2!问题的起源:设置自己喜欢的浏览器为系统绝对默认的浏览器。(修改.http等

200分:高难,神秘莫测的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   Command
End   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这个参数的时候如何正确打开呢?

请各路英雄详加指点,不胜感激!



[解决办法]
不懂....蹭蹭...顺便帮顶...
[解决办法]
学习

[解决办法]
-embedding :Starts the Web browser control (no home page is displayed).

和参数没关系。传递路径不是通过命令行参数的。应该是通过什么回溯的方式。
比如象WEB迅雷,快车等的“下载”和“全部下载”等功能,就可以取到所有需要的信息。
[解决办法]
新启动的窗口是一个activex对象,
启动以后直接操作对象。
[解决办法]
iget(悟不透) 说到点子上了
程序之间的DDE本身就类似这个原理,只不过更多应用是同名程序本身.比如WMP,当我们播放着一首音乐,此时我们CLICK了硬盘或网络的一个WMA连接或文件就自动WMP播放新曲目了呢?就是DDE过去的命令,这个在注册表里可以看的一清2楚.
再有,楼主可以自己做个带命令行的VB小程序,再去挖掘WEBBROSER中的这些问题可能更有帮助些,呵呵.我乱说说,不怪罪吧?

热点排行