vc谷歌浏览器,谷歌浏览器webvr

大家好,vc谷歌浏览器相信很多的网友都不是很明白,包括谷歌浏览器webvr也是一样,不过没有关系,接下来就来为大家分享关于vc谷歌浏览器和谷歌浏览器webvr的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

vc谷歌浏览器,谷歌浏览器webvr

本文目录

  1. VC下使用COM实现和IE浏览器交互的几种方法
  2. 开发用什么浏览器
  3. 如何在VC程序中获取IE浏览器的代理服务器设置

一、VC下使用COM实现和IE浏览器交互的几种方法

1、----首先我们来看系统是如何知道当前有多少个IE的实例在运行。

2、我们知道在Windows体系结构下,一个应用程序可以通过操作系统的运行对象表来和这些应用的实例进行交互。但是IE当前的实现机制是不在运行对象表中进行注册,所以需要采用其他的方法。我们知道可以通过ShellWindows集合来代表属于shell的当前打开的窗口的集合,而IE就是属于shell的一个应用程序。

3、----下面我们描述一下用VC实现对当前

4、IE实例的进行遍历的方法。IShellWindows是关于系统shell的一个接口,我们可以定义一个如下的接口变量:

5、SHDocVw::IShellWindowsPtr m_spSHWinds;

6、(__uuidof(SHDocVw::ShellWindows));

7、通过IShellWindows接口的方法GetCount

8、nCount= m_spSHWinds->GetCount();

9、通过IShellWindows接口的方法Item

10、然后我们可以判断实例对象是不是

11、属于IE浏览器对象,通过下面的语句实现:

12、----在得到了IE浏览器对象以后,我们可以调用IWebBrowser2Ptr接口的方法来得到当前的文档对象的指针:

13、MSHTML::IHTMLDocument2Ptr spDoc(spBrowser->GetDocument());

14、然后我们就可以通过这个接口对这个文档对象进行操作,比如通过Gettitle得到文档的标题。

15、我们在浏览网络的时候,一般总会同时开很多IE的实例,如果这些页面都是很好的话,我们可能想保存在硬盘上,这样,我们需要对每一个实例进行保存,而如果我们采用上面的原理,我们可以得到每一个IE的实例及其网页对象的接口,这样就可以通过一个简单的程序来批量的保存当前的所有打开的网页。采用上面介绍的方法实现了对当前IE实例的遍历,但是我们希望得到每一个IE实例所产生的事件,这就需要通过DLL的机制来实现。

16、我们介绍一下如何建立和IE进行绑定的DLL的实现的过程。为了和IE的运行实例进行绑定,我们需要建立一个能够和每一个IE实例进行绑定的DLL。IE的启动过程是这样的,当每一个IE的实例启动的时候,它都会在注册表中去寻找这个的一个CLSID,具体的注册表的键位置为:

17、HKEY_LOCALL_MACHINE\SOFTWARE\Microsoft\Windows

18、\CurrentVersion\Explorer\Browser Helper Objects

19、当在这个键位置下存在CLSIDs的时候,IE会通过使用CoCreateInstance()方法来创建列在该键位置下的每一个对象的实例。注意对象的CLSIDs必须用子键而非名字值的形式表现,比如{DD41D66E-CE4F-11D2-8DA9-00A0249EABF4}

20、就是一个有效的子键。我们使用DLL的形式而非EXE的形式的原因是因为DLL和IE实例运行在同一个进程空间里面。每一个这种形式的DLL必须实现接口IObjectWithSite,其中方法SetSite必须被实现。通过这个方法,我们自己的DLL就可以得到一个指向IE

21、COM对象的IUnknown的指针,实际上通过这个指针我们就可以通过COM对象中的方法QueryInterface来遍历所有可以得到的接口,这是COM的基本的机制。当然我们需要的只是IWebBrowser2这个接口。

22、实际上我们建立的是一个COM对象,DLL只不过是COM对象的一种表现形式。我们建立的COM对象需要建立和实现的方法有:

23、IOleObjectWithSite接口的方法SetSite必须实现。实际上IE实例通过这个方法向我们的COM对象传递一个接口的指针。假设我们有一个接口指针的变量,不妨设为:

24、----CComQIPtr< IWebBrowser2,&IID_IWebBrowser2>

25、我们就可以在方法SetSite中把这个传进来的接口指针赋给m_myWebBrowser2。

26、COM对象的接口后,我们需要把自己的DLL和IE实例所发生的事件相关连,为了实现这个目的,需要介绍两个接口:

27、IConnectionPointContainer。这里使用这个接口的目的是用来根据它得到的IID来建立和DLL的一个特定的连接。比如我们可以进行如下的定义:

28、CComQIPtr< IConnectionPointContainer,

29、&IID_IConnectionPointContainer

30、spCPContainer(m_myWebBrowser2);

31、----然后,我们需要把所有IE中发生的事件和我们的DLL进行通讯,可以使用

32、IConnectPoint。通过这个接口,客户可以对连接的对象开始或者是终止一个advisory循环。IConnectPoint有两个主要的方法,一个为Advice,另一个为Unadvise。对于我们的应用来说,Advise是用来在每一个IE发生的事件和DLL之间建立一个通道。而Unadvise就是用来终止以前用Advise建立的通知关系。比如我们可以定义IConnectPoint接口如下:

33、CComPtr< IConnectionPoint> spConnectionPoint;

34、然后,我们要使所有在IE实例中发生的事件和我们的DLL相关,可以使用如下的方法:

35、hr= spCPContainer->FindConnectionPoint(

36、DIID_DWebBrowserEvents2,&spConnectionPoint);

37、----然后我们通过IConnectPoint接口的方法Advice使每当IE有一个新的事件发生的时候,都能够让我们的DLL知道。可以用如下的语句实现:

38、hr= spConnectionPoint->Advise(

39、(IDispatch*)this,&m_dwIDCode);

40、----在把IE实例中的事件和我们的DLL之间建立联系以后,我们可以通过IDispatch接口的Invoke()方法来处理所有的IE的事件。

41、IDispatch接口的Invoke()方法。IDispatch是从IUnknown中继承的一个接口的类型,通过COM接口提供的任何服务都可以通过IDispatch接口来实现。IDispatch::Invoke的工作方式同vtbl幕后的工作方式是类似的,Invoke将实现一组按索引来访问的函数,我们可以对Invoke方法进行动态的定制以提供不同的服务。Invoke方法的表示如下:

42、STDMETHOD(Invoke)(DISPID dispidMember,REFIID

43、DISPPARAMS* pdispparams, VARIANT* pvarResult,

44、EXCEPINFO* pexcepinfo, UINT* puArgErr);

45、----其中,DISPID是一个长整数,它标识的是一个函数。对于IDispatch的某一个特定的实现,DISPID都是唯一的。IDispatch的每一个实现都有其自己的IID,这里dispidMemeber实际上是可以认为是和IE实例所发生的每一个事件相关的方法,比如:DISPID_BEFORENAVIGATE2,DISPID_NAVIGATECOMPLETE2等等。这个方法中另外一个比较重要的参数是DISPPARAMS,它的结构如下:

46、//VARIANTARG是同VARAIANT相同的,可以在

47、//OAIDL.IDL中找到。所以实际上rgvarg是一个参数数

48、DISPID* rgdispidNameArgs;//命名参数的DISPID

49、----要注意的是每一个参数的类型都是VARIANTARG,所以在IE和我们DLL之间可以传递的参数类型的数目是有限的。只有那些能够被放到VARIANTARG结构中的类型才可以通过调度接口进行传递。比如对于事件DISPID_NAVIGATECOMPLETE2来说:第一个参数表示IE在访问的URL的值,类型是VT_BYREF|VT_VARIANT。注意DISPID_NAVIGATECOMPLETE2等DISPID已经在VC中被定义,我们可以直接进行使用。如上说述,我们在方法Invoke中可以得到所有IE实例所发生的事件,我们可以把这些数据放到文件中进行事后的分析,也可以放到一个列表框中实时的显示。

50、---- 4.微软的HTML文档对象模型和应用分析

51、下面我们来看如何得到网页文档的接口:网页文档的接口为IHTMLDocument2,可以通过调用IE

52、COM对象的get_Document方法来得到网页的接口。使用如下的语句:

53、hr= m_spWebBrowser2->get_Document(&spDisp);

54、&IID_IHTMLDocument2> spHTML;

55、这样我们就得到了网页对象的接口,然后我们就可以对网页进行分析,比如通过IHTMLDocument2提供的方法get_URL我们可以得到和该网页相关的URL的地址值,通过get_forms方法可以该网页中所有的Form对象的集合。实际上W3C组织已经制定了一个DOM(Document

56、Model)标准,当然这个标准不仅仅是针对HTML,同时还是针对XML制定的。W3C组织只是定义了网页对象的接口,不同的公司可以采用不同的语言和方法进行具体的实现。按照W3C组织定义的网页对象被认为是动态的,即用户可以动态的对网页对象里面所包含的每一个对象进行操作。这里的对象可以是指一个输入框,也可以是图象和声音等对象。同时按照W3C的正式文档的说明,网页对象是可以动态增加和删除的。事实上,很少有厂商实现了DOM定义的所有功能。微软对网页对象的定义也基本上是按照这个标准实现的。但是当前的接口还不支持动态的增加和删除元素,但是可以对网页中的基本元素进行属性的修改。比如IHTMLElementCollection表示网页中一些基本的元素的集合,IHTMLElement表示网页中的一个基本的元素。而象IHTMLOptionElement接口就表示一个特定的元素Option。基本的元素都有setAttribute和geAttribute方法来动态的设置和得到元素的名称和值。

57、较为常见的一个应用是我们能够分析网页中是否有需要填写的Forms,如果这个网址的Forms以前已经填写过而且数据我们已经保存下来的话,我们就可以把数据自动放到和该URL下的Forms的相关的位置中去。另外,我们可以总结网页上需要填写的Form的数据项,先对这些数据项进行赋值,以后碰到有相同的数据项的时候就自动把我们赋值的内容填写进去。实际上Form是对象,Form中包含的元素,比如INPUT,OPTION,SELECT等类型的输入元素都是对象。

58、另外一个可以想到的应用是自动对网页中的文本进行翻译,因为我们可以修改网页中任何对象的属性,所以我们可以把里面不属于本国语言的部分自动翻译成本国语言,当然真正的实现还要靠自然语言理解方面技术的突破,但是IE浏览器的接口和对象的形式使我们能够灵活的控制整个IE,无论是从事件对象还是到网页对象。

二、开发用什么浏览器

问题一:开发html5用哪个浏览器最合适 chrome是最流行的,ff是最适合研发的且对html友好支持,其他的所谓现代浏览器,就是相对ie问题二:软件开发人员用什么浏览器开发者应该是用火狐浏览器,因为其兼容性较为理想,有很多核心代码都是开源的!

问题三:开发网站用什么浏览器各种类型的浏览器你都要用来测试,ie、火狐必需的,但是由于ie浏览器版本太多,各方面都要考虑,所以你可以用微软鼎expression套件,里面有专业的测试工具,可以模拟ie6-ie9;或者你也可以下一个ietester,以前我们经常用的,很不错的

问题四:用什么软件开发浏览器很多工具可以实现啊,这个根据使用平台来确定。

问题五:web开发浏览器选择问题逐条地回答你吧:

1.【现在web开发用什么浏览器】:web开发方面,如果你的网页是前台,如果你希望所有的用户都没有限制地浏览你的网页,那么必不可少的,你要在你的电脑中安装如下的浏览器: IE6、IE7、IE8、IE9、FireFox、谷歌、Opera。哪怕一台电脑装不下,也要在程序上线之前,在其它电脑上在各个浏览器中检测一下你的代码是否兼容性良好。

2.【火狐和谷歌两款浏览器从性能上,速度上,调试方便性以及调试功能上】:性能上谷歌略胜一筹,但相差不多,如果与Opera相比,没有一款能够与之媲美的!Opera是浏览器加载、速度方面的王者,无人超越!但从调试的方便性上,IE有它有特点,就是可以在左下角看到JS是否有错误,而在js代码错误原因的迅速定位查找方面,FireFox是强者,很不错,总之,怎么说呢?如果个人使用,Oprea不错,如果调试、IE和FireFox二者都不错。

3.【火狐的firebug和谷歌自带的调试工具相比有什么区别,优缺点是什么】火狐的firebug用起来让人觉得直观、简单、明了,谷歌的我没用过,不知道。IE的好处就是可以不用打开调试窗口就可以知道程序是不是又写错了!各有优点,建议结合使用!

4.【谷歌浏览器附带的调试工具有没有中文版啊】没有,相当肯定地说,没有,这东西是随浏览器自带的,上哪儿找单独的去?

5.【从安全性上说,这两款哪个安全性能高】现在的浏览器都基本差不了许多了,哪一款浏览器的哪一个版本,都会在不确定的时间里,由不确定的人发现一些安全漏洞,一句话,世界上没有十全十美的东西,但错了就改,不是很好吗?比如,它们总会定期被漏洞或土升级,就是这样的道理,它们的开发者,也会犯错、疏漏!

问题六:什么是主流Web浏览器的开发模式 1,火狐(Firefox)的Firebug和YSlow。

2,Google Chrome开发工具和Safari开发工具。

3,IE浏览器开发工具Developer Toolbar。

问题七:怎么开发浏览器到底是开发浏览器,还是开发浏览器内核?

如果是前者,那么 C#一般就是用 Webbrowser或继承重写它,了不起再多个 Webkit,剩下的都是功能上的问题了。

如果是后者,放弃 C#乃至.NET框架吧!浏览器内核和系统内核一样,需要用 C/C++来开发。目前世界上只有4种主流的内核,Trident(IE)、Gecko(Firefox)、KHTML、WebKit(Chrome),还有些小众的,比如Presto(Opera)之类的,就不罗列了,但是很遗憾的是,即使是“小众”国内也没有一款(我指的是可以真正投入使用的,你可能会说 UC那个所谓的“自主研发”内核,它是参照 WebKit和 KHTML两个开源项目该改写的,并非真正的“自主”)!

如果是真的是内核开发,那涵盖的知识领域范围太广了,大概的知识:

●对HTML、CSS、XML有深刻的理解,因为要根据这些内容生成网页结构。

●对程序绘图、数字成像要有极高的造诣,能根据HTML、CSS、IMAGE生成相应页面。

●精通HTTP、HTTPS、FTP等协议。

●能对javascript虚拟运行环境解释。

所以,全世界真正有能力开发内核就那么几家大公司,而且都不是一个人完成的,国内的浏览器公司全都是在用人家的内核加以封装。

问题八:做web开发主要用那几个浏览器测试? web开发需要考虑一下几种浏览器的测试,因为内核不同

1、IE7浏览器,内核不同于ie6和8,因此需要考虑控件和数据显示问题。

2、IE8浏览器,目前win7等系统默认浏览器,内核不同于ie7,需重点测试。本身提供开发信息。

3、火狐浏览器,第三方浏览器,内核不同于IE和谷歌内核,且开源,需重点测试,建议装控件。

4、谷歌浏览器,第三方浏览器,内核不同于IE和火狐内核,国内外应用广,提供监控工具可广泛应用在需要网络信息分析的软件上,需要重点测试。

5、其余浏览器,例如360等,有时间就试试,没时间就放弃测试。

问题九:网络浏览器(IE,firefox等)是用什么语言开发的??楼上的不要误导人,IE使用VC++写的,fir锭fox使用C++写的,后者网上可以找到源代码,搜一下就知道了。

三、如何在VC程序中获取IE浏览器的代理服务器设置

分类:电脑/网络>>软件>>其他软件

估计与IE的配置文件或者注册表某些特定键值有关,谢~

在具体使用的时候需要增加头文件#include<wini.h>和库 WININET.LIB

------------------------------------------------------------------

@ProxyType代理类型,如HTTP,SOCKS,FTP...

@ProxyAddr返回代理服务器的地址

@ProxyPort返回代理服务器的端口

int GetIEProxy(CString ProxyType,CString&ProxyAddr,int&ProxyPort)

INTERNET_PROXY_INFO* pInfo=(INTERNET_PROXY_INFO*)szBuf;

if(!InterQueryOption(NULL, INTERNET_OPTION_PROXY, pInfo,&nSize))

CString strTmp(pInfo->lpszProxy);

if(strTmp.IsEmpty()) return-4;无代理设置信息

CString strProxyType= ProxyType;

socks=192.168.1.100:3080=192.168.1.100:808=192.168.1.100:808 gopher=192.168.1.100:808 ftp=192.168.1.100:808

strTmp.MakeUpper();转化为大写

nPos= strTmp.Find(strProxyType.GetBuffer(0),nStart);

strTmp= strTmp.Right(nCurLen- nPos);

HTTP=192.168.1.100:808 gopher=192.168.1.100:808 ftp=192.168.1.100:808

nPos= strTmp.Find("",nStart);

strTmp= strTmp.Right(nCurLen-strProxyType.GetLength());

nPos= strTmp.Find(":",nStart);

ProxyAddr= strTmp.Left(nPos);

strTmp= strTmp.Right(nCurLen-nPos-1);

你这个是旧的方法(IE4 and earlier)了,从IE5开始,最好使用

INTERNET_OPTION_PER_CONNECTION_OPTION来Invoke InterQueryOption,详细内容可以参考MS Q226473

如何编程动态改变IE的代理服务器设置,并且使之马上生效!

用到的关键函数是wini库里面的InterSetOption. msdn里面有对它详细的介绍,可以自己去看看.当把参数dwOption设置为INTERNET_OPTION_SETTINGS_CHANGED的时候.他就会促使IE在下一次打开网页的时候重新到注册表里面去取代理的设置信息.所以我们就可以先将注册表里面的代理信息更改掉,然后调用InterSetOption函数,从而达到使自己想要的代理设置马上生效的目的.

下面的函数可以实现改变IE的代理服务器设置的目的.里面加了少许的注释以帮助大家理解.

BOOL SetHttpProxy(CString ip, UINT port)

l_just.Format("=%s:%d", ip.LockBuffer(), port);

下面的代码将注册表项HKEY_CURRENT_USER\\Sofare\\Microsoft\\Windows\\CurrentVersion\\Inter Settings\\ProxyServer

HKEY hKeyIn= HKEY_CURRENT_USER, hKeyOut;

if( ERROR_SUCCESS!= RegOpenKeyEx(hKeyIn,"Sofare\\Microsoft\\Windows\\CurrentVersion\\Inter Settings", 0, KEY_CREATE_LINK| KEY_WRITE| KEY_READ| KEY_NOTIFY,&hKeyOut))

if(ERROR_SUCCESS!= RegQueryValueEx(hKeyOut,"ProxyServer", NULL, NULL, NULL,®size))

LPBYTE pValue= new BYTE[regsize];

memset(pValue, 0x00, regsize);

if(ERROR_SUCCESS!= RegQueryValueEx(hKeyOut,"ProxyServer", NULL, NULL, pValue,®size))

CString oldproxy((char*)pValue);

从注册表中读出来的数据格式为:=111.111.111.111:80;ftp=222.222.222.222:21;......,

如果你只想改变的代理的话,就只要把其中的111.111.111.111:80换成你想要的代理就行了,

下面的代码就替换代理成为参数所指定的代理.

如果没有字符串中没有找到"="说明用户没有设置代理,这时候直接加在最前面.

if(-1==(pos= oldproxy.Find("=")))

if(-1==(pos1= oldproxy.Find(";", pos)))

oldproxy.Delete(pos, pos1- pos);

oldproxy.Insert(pos, l_just);

if(ERROR_SUCCESS!= RegSetValueEx(hKeyOut,"ProxyServer", 0, REG_SZ,(const unsigned char*)oldproxy.LockBuffer(), oldproxy.GetLength()+ 1))

if(!InterSetOption(NULL, INTERNET_OPTION_SETTINGS_CHANGED, NULL, 0))

最后在使用此函数的时候不要忘记包含头文件#include<wini.h>和lib: wini.lib

END,本文到此结束,如果可以帮助到大家,还望关注本站哦!

声明:信息资讯网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,版权归原作者东方体育日报所有。若您的权利被侵害,请联系 删除。

本文链接:http://www.gdxhedu.com/news/125606.html