WebBrowser内核指定

本文介绍如何通过修改注册表设置C# WebBrowser控件的IE内核版本,以解决WebBrowser控件默认使用较低版本IE内核的问题。提供了手动修改注册表的具体步骤及使用C#代码实现这一功能的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在C#窗体程序中,WebBrowser控件默认的内核可能比系统当前版本更低,修改为最高版本的方法为修改注册表,具体操作方法如下:

  1. 在开始菜单内输入“regedit.exe”,进入注册表编辑器。
  2. 找到注册表项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
  3. 在右侧空白区域内单击鼠标右键,点击[新建]→[DWORD(32-位)值]。
  4. 新建的项取名为应用程序的名称+.exe,编辑值时,选择基数“十进制”,填写数值数据,这里填写11000(IE11)。
  5. 最后运行自己的应用程序,发现问题解决。

    通过代码修改注册表内容C#:

 public class IEVersion
  {
      /// <summary>
      /// IE WebBrowser内核设置
      /// </summary>
      public static void BrowserEmulationSet()
      {
          //当前程序名称
          var exeName = Process.GetCurrentProcess().ProcessName + ".exe";
          //系统注册表信息
          var mreg = Registry.LocalMachine;
          //IE注册表信息
          var ie = mreg.OpenSubKey(@"SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION", RegistryKeyPermissionCheck.ReadWriteSubTree);
          if (ie != null)
          {
              try
              {
                  var val = ieVersionEmulation(ieVersion());
                  if (val != 0)
                  {
                      ie.SetValue(exeName, val);
                  }
                  mreg.Close();
              }
              catch (Exception ex)
              {
                  Console.Write(ex.Message);
              }
          }
      }

      /// <summary>
      /// IE版本号
      /// </summary>
      /// <returns></returns>
      static int ieVersion()
      {
          //IE版本号
          RegistryKey mreg = Registry.LocalMachine;
          mreg = mreg.CreateSubKey("SOFTWARE\\Microsoft\\Internet Explorer");

          //更新版本
          var svcVersion = mreg.GetValue("svcVersion");
          if (svcVersion != null)
          {
              mreg.Close();
              var v = svcVersion.ToString().Split('.')[0];
              return int.Parse(v);
          }
          else
          {
              //默认版本
              var ieVersion = mreg.GetValue("Version");
              mreg.Close();
              if (ieVersion != null)
              {
                  var v = ieVersion.ToString().Split('.')[0];
                  return int.Parse(v);
              }
          }
          return 0;
      }

      /// <summary>
      /// 根据IE版本号 返回Emulation值
      /// </summary>
      /// <param name="ieVersion"></param>
      /// <returns></returns>
      static int ieVersionEmulation(int ieVersion)
      {
          //IE7 7000 (0x1B58)
          if (ieVersion < 8)
          {
              return 0;
          }
          if (ieVersion == 8)
          {
              return 0x1F40;//8000 (0x1F40)、8888 (0x22B8)
          }
          if (ieVersion == 9)
          {
              return 0x2328;//9000 (0x2328)、9999 (0x270F)
          }
          else if (ieVersion == 10)
          {
              return 0x02710;//10000 (0x02710)、10001 (0x2711)
          }
          else if (ieVersion == 11)
          {
              return 0x2AF8;//11000 (0x2AF8)、11001 (0x2AF9
          }
          return 0;
      }
  }

补充:
如果电脑上安装了IE8或者之后版本的IE浏览器,Webbrowser控件会使用IE7兼容模式来显示网页内容。解决方法是在注册表中为你的进程指定引用IE的版本号。

比如我的程序叫做a.exe,以64位机器为例,因为32位程序在64位机器上访问注册表时会自动被转到32位地址,而不是真正的地址,所以使用第一个即可。

对于64位程序

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

对于32位程序

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

在对应的路径下添加你程序名字,如a.exe为名的value,DWORD值。(调试模式为a.vshost.exe)

值选项:

10000(0×2710) IE10
9999 (0x270F) IE9 忽略html5
9000 (0×2328) IE9
8888 (0x22B8) IE8 忽略html5
8000 (0x1F40) IE8
7000 (0x1B58) IE7

要在 VB.NET 中指定 WebBrowser 控件使用的 IE 内核版本,可以使用以下代码: ```vb WebBrowser1.Version = New Version(11, 0) ' 指定使用 IE 11 内核 ``` 这将告诉控件使用指定版本的 IE 内核来渲染页面。请注意,这将仅在运行时生效,而不会影响设计时的显示。 另外,为了确保控件使用所需的 IE 版本,还需要在项目的应用程序清单文件 (`.manifest`) 中添加相应的元素。具体来说,需要在 `dependency` 元素中添加以下内容: ```xml <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="*" publicKeyToken="1fc8b3b9a1e18e3b" language="*" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="*" publicKeyToken="1fc8b3b9a1e18e3b" language="*" /> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="*" publicKeyToken="1fc8b3b9a1e18e3b" language="*" /> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.30729.1" processorArchitecture="*" publicKeyToken="1fc8b3b9a1e18e3b" language="*" /> </dependentAssembly> </dependentAssembly> </dependentAssembly> </dependentAssembly> </dependentAssembly> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="*" publicKeyToken="1fc8b3b9a1e18e3b" language="*" /> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="*" publicKeyToken="1fc8b3b9a1e18e3b" language="*" /> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.30729.1" processorArchitecture="*" publicKeyToken="1fc8b3b9a1e18e3b" language="*" /> </dependentAssembly> </dependentAssembly> </dependentAssembly> </dependentAssembly> </dependentAssembly> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="*" publicKeyToken="1fc8b3b9a1e18e3b" language="*" /> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="*" publicKeyToken="1fc8b3b9a1e18e3b" language="*" /> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.30729.1" processorArchitecture="*" publicKeyToken="1fc8b3b9a1e18e3b" language="*" /> </dependentAssembly> </dependentAssembly> </dependentAssembly> </dependentAssembly> </dependentAssembly> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="*" publicKeyToken="1fc8b3b9a1e18e3b" language="*" /> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="*" publicKeyToken="1fc8b3b9a1e18e3b" language="*" /> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.30729.1" processorArchitecture="*" publicKeyToken="1fc8b3b9a1e18e3b" language="*" /> </dependentAssembly> </dependentAssembly> </dependentAssembly> </dependentAssembly> </dependentAssembly> </dependentAssembly> ``` 其中,`version` 属性应与代码中指定的版本号一致。这将确保控件在运行时使用所需的 IE 版本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值