我想了解浏览器的通信过程。发现
WebBrowser在DownloadBegin事件之后
会顺序调用通信的api
InternetOpenA(hook OK)<--------//'进行初始化,一个WebBrowser只进行一次调用(目前了解的情况,谁能说说什么条件下能再调用呢)。HINTERNET hInternet = InternetOpen(szAppName, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);'WebBrowser是不是一定要hook才能得到hInternet呢。如果有多个WebBrowser,需要对每个WebBrowser进行设置,调用API(InternetSetOption),类似多页浏览器的问题,hInternet不太可能是hook获取的吧。这个问题改如何解决。如果是hook进行.有个思路是:创建WebBrowser的时候先Navigate2空白页,然后获得,hInternet[n]=hook(InternetOpenA).用户选择第n个WebBrowser浏览的时候,因为第N个WebBrowser[n]设置是动态设置的,所以先调用InternetSetOption(hInternet[n],,,),然后再根据网址Navigate2。//前提是一个WebBrowser只进行一次InternetOpenA调用,并且返回的hInternet不能被释放。否则使用InternetSetOption(hInternet, INTERNET_OPTION_PER_CONNECTION_OPTION, ...) 对WebBrowser设置的时候就可能错误。hInternet为空。。//------->
InternetConnectA(hook OK)
HttpOpenRequestA(hook OK)就差没调用API发送请求(HttpSendRequestA)
。以上3个api都hook到了。就差HttpSendRequestA没hook到。我使用以下API就能正常收到服务器发回的信息,
InternetOpenA
InternetConnectA
HttpOpenRequestA
HttpSendRequestA
但问题来了。是WebBrowser直接调用了socket发送,还是我的hook有问题呢。哪位前辈hook过HttpSendRequestA这个api,以上就是初学webbrowser的问题,将问题简化就是:多页浏览器(使用WebBrowser控件)如何动态的设置。希望有相同question的朋友一起讨论,或者前辈的指点。