C#完美任意设置webBrowser框架默认的IE内核版本

2020-01-13

我们在程序里面写入以下代码 using Microsoft.Win32;

/// <summary>
/// 修改注册表信息来兼容当前程序
///
/// </summary>
static void SetWebBrowserFeatures(int ieVersion) { // don’t change the registry if running in-proc inside Visual Studio
if (LicenseManager.UsageMode != LicenseUsageMode.Runtime) return; //获取程序及名称
var appName = System.IO.Path.GetFileName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName); //得到浏览器的模式的值
UInt32 ieMode = GeoEmulationModee(ieVersion); var featureControlRegKey = @”HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl"; //设置浏览器对应用程序(appName)以什么模式(ieMode)运行
Registry.SetValue(featureControlRegKey + “FEATURE_BROWSER_EMULATION”, appName, ieMode, RegistryValueKind.DWord); // enable the features which are “On” for the full Internet Explorer browser
//不晓得设置有什么用
Registry.SetValue(featureControlRegKey + “FEATURE_ENABLE_CLIPCHILDREN_OPTIMIZATION”, appName, 1, RegistryValueKind.DWord);

        //Registry.SetValue(featureControlRegKey + "FEATURE_AJAX_CONNECTIONEVENTS",  
        //    appName, 1, RegistryValueKind.DWord);  


        //Registry.SetValue(featureControlRegKey + "FEATURE_GPU_RENDERING",  
        //    appName, 1, RegistryValueKind.DWord);  


        //Registry.SetValue(featureControlRegKey + "FEATURE_WEBOC_DOCUMENT_ZOOM",  
        //    appName, 1, RegistryValueKind.DWord);  


        //Registry.SetValue(featureControlRegKey + "FEATURE_NINPUT_LEGACYMODE",  
        //    appName, 0, RegistryValueKind.DWord);  
    }
    /// <summary>  
    /// 获取浏览器的版本  
    /// </summary>  
    /// <returns></returns>  
    static int GetBrowserVersion()
    {
        int browserVersion = 0;
        using (var ieKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Internet Explorer",
            RegistryKeyPermissionCheck.ReadSubTree,
            System.Security.AccessControl.RegistryRights.QueryValues))
        {
            var version = ieKey.GetValue("svcVersion");
            if (null == version)
            {
                version = ieKey.GetValue("Version");
                if (null == version)
                    throw new ApplicationException("Microsoft Internet Explorer is required!");
            }
            int.TryParse(version.ToString().Split('.')[0], out browserVersion);
        }
        //如果小于7  
        if (browserVersion < 7)
        {
            throw new ApplicationException("不支持的浏览器版本!");
        }
        return browserVersion;
    }
    /// <summary>  
    /// 通过版本得到浏览器模式的值  
    /// </summary>  
    /// <param name="browserVersion"></param>  
    /// <returns></returns>  
    static UInt32 GeoEmulationModee(int browserVersion)
    {
        UInt32 mode = 11000; // Internet Explorer 11. Webpages containing standards-based !DOCTYPE directives are displayed in IE11 Standards mode.   
        switch (browserVersion)
        {
            case 7:
                mode = 7000; // Webpages containing standards-based !DOCTYPE directives are displayed in IE7 Standards mode.   
                break;
            case 8:
                mode = 8000; // Webpages containing standards-based !DOCTYPE directives are displayed in IE8 mode.   
                break;
            case 9:
                mode = 9000; // Internet Explorer 9. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode.                      
                break;
            case 10:
                mode = 10000; // Internet Explorer 10.  
                break;
            case 11:
                mode = 11000; // Internet Explorer 11  
                break;
        }
        return mode;
    }

然后在在如图所示写入 调用

SetWebBrowserFeatures(11);

可以看到 已经设置为IE11的内核了