最近有点无聊,于是我就想找一些实例来充实自己,在百度上搜索了一番,终于在Codefans.net上找到了一个不错的VB程序——QQ好友在线查询器,它的代码相对并不多,为了便于大家的理解,我也添加了一些注释:
Combol.Text也就是你在组合框中输入的QQ号,通过Web浏览器控件的Navigate属性访问腾讯提供的一种在线状态查询接口,该接口返回一张图片来表示用户当前的在线状态;目前系统只支持“在线”和“离线”两种状态。
在WebBrowsc啦件导航到新的URL后发生,即文档正在下载中(比如在HTML中图片仍然在下载),但文档已经被服务器确认,并且文档对象在阅读器里已经被创建时,触发此事件。pDisp就是返回当前正在调用此事件的对象,可能是顶层的页面,即当前页面,也有可能是当前页面里的某个对象,也有可能是应用程序中的WebBrowser对象。而URL就是返回一个标准格式化后的URL。
到了这儿,也还不是我们的重点,当我在设计界面查找这个WebBrowserl控件时,居然没有找到,我把界面拉大,此时意外发生了,找到WebBrowserl控件的同时还发现了“源码爱好者”,这怎么会呢?代码里边并没有这个链接啊,而且我也没有运行程序啊?并且还处于设计模式下呢,怎么可能会自动访问外网呢?这作者真是太神奇了。
查看了WebBrowserl的所有属性部没有看到有可疑URL的,关闭了所有可能连接网络的程序,使用360的“网络连接状态”来查看,真的有个连接,IP地址为61.191.61.17,进程是vb6.exe,没有什么异常呀!在cmd下执行ping,返回的也确实是这个地址,后来我还用到了Wireshark来分析本地网络和外网的流量,也仅是访问了codefans这个网站而已,没有下载什么东西。
真是百思不得其解啊!后来我又询问了其他同学和老师也看不出是什么问题,真是让我佩服了作者整整一个星期。
经过了一个星期的冷处理后,大脑可能已经跳出了原来的思维模式,我换用记事本(本来打算使用OD的)一个一个文件的打开(共有5个),最后看到了一个网址,猫腻原来在这里,就这个Location害得我整整郁闷了一星期。我到网上搜索了一下,发现没有对这个问题的详细解答,在线MSDN上只说了如下一段话:web浏览器控件公开了某些属性,比如LocationURL和RegisterAsBrowser通过普通的COM属性方法。在属性包中只存储了诸如AutoArrange的其它属性,并在任何方法公开为这些属性。因此,只能在属性包中设置这些属性。自动翻译的非常别扭,其它的属性比如Location,只能打开frm文件来修改,它其实是接收一个字符串表达式,但是可以让它起作用的只能是URL。