WebBrowser内核指定

在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

猜你喜欢

转载自blog.csdn.net/wangbingqian_110/article/details/78985004