保留在本地电脑的一篇记录,第二条描述是在网上看来的,忘记在哪看的了,也就没注明出处,望见谅。

1、Winform内置浏览器控件的底层调用与系统IE浏览器的底层调用相同。

2、IE8 对渲染引擎做了很大的改动,新增加一个标准模式 (Standard Mode)。 当用户机器升级到IE8, WebBrowser控件也会随之升级到IE8的渲染引擎。为了保证这些使用WebBrowser控件的应用软件能够工作起来和原来一样,IE8环境下的WebBrowser控件在默认情况下使用了IE7 的渲染模式(也就是IE8中的Compatible View (兼容视图)模式),IE9,IE10,IE11默认情况下同上所述。通过对系统注册表进行修改,可将该控件修改为标准模式渲染(经过本机IE11测试),修改后客户端对注册表的读取写入需要相应的权限。

3、关于构建 Chromium内核浏览器控件的要求;查阅资料后发现存在 CefSharp 项目可实现对Chromium内核控件的支持,但该项目最低需要.NET4.5.2框架的支持。翻查历史版本后,该项目大版本号49为支持NET4.0的最后版,版本差距过大,不建议使用。

4、注册表项添加时需使用完整的进程名,如:chrome.exe。若设置chrome无效。

5、注册表位置记录

记录webBrowser控件使用IE渲染版本的路径:

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

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

记录当前系统IE版本的位置:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer,Version为

当前系统自带IE版本,若存在svcVersion,则此项为升级后的IE版本。

6、添加注册表时IE各版本代码:

switch (IEVersion)
{
case 7: //7000 (0x1B58) IE7
version = 0x1B58;
break;
case 8: // 8000 (0x1F40) IE8
version = 0x1F40;
break;
case 9: //9000 (0×2328) IE9
version = 0x2328;
break;
case 10: //10000(0×2710) IE10
version = 0x2710;
break;
case 11: //11000(0×2af8) IE11
version =0x2af8;
break;
default :
version = 0x2328;
break;
}

7、

/*创建时间:
*创建用途:对固定注册表项进行修改,使得WebBrowser控件使用本机IE的标准渲染模式对链接内容进行渲染,
* 而非默认的 兼容模式。
* 本文件获取IE版本出错时,会将注册表项默认设置为IE9对应的值,原因为IE9为win7自带版本。
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Win32;
using System.Windows.Forms;
using System.Diagnostics; namespace XXXXXX
{
class SetIEVersionByRegedit
{
//private bool is64BitSystem = false; const string DEFAULT_IE_VERSION = "9.0"; const string COMMON_PATH_FRONT = @"SOFTWARE"; const string DIFF_BETWEEN_32_AND_64 = @"\Wow6432Node"; const string COMMON_PATH_BEHIND = @"\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION"; //舍弃以下内容,注册表两项全部写入
//private int GetBitOperatingSystem ()
//{
// return Environment.Is64BitOperatingSystem ? 64 : 32;
//} //private string GetSettingPath ()
//{
// int systemBit = GetBitOperatingSystem();
// if (systemBit == 32)
// {
// return new StringBuilder().Append(COMMON_PATH_FRONT).
// }
//} public void SetRegistry()
{
int IEVersion = GetIEVersion();
string itemName = GetItemNameNeedCreat();
uint itemValue = GetItemValueNeedCreat(IEVersion);
string path32Key = COMMON_PATH_FRONT + COMMON_PATH_BEHIND;
string path64Key = COMMON_PATH_FRONT + DIFF_BETWEEN_32_AND_64 + COMMON_PATH_BEHIND;
WriteToRegistry(path32Key, itemName, itemValue);
WriteToRegistry(path64Key, itemName, itemValue);
} #region 获取IE版本
private int GetIEVersion ()
{
string version = "9";
try
{
version = GetIEVersionByWebControl();
}
catch
{
version = GetIEVersionByRegistry();
}
return Convert.ToInt32(version);
} /// <summary>
/// 通过注册表获取IE版本,默认返回9
/// </summary>
/// <returns></returns>
private string GetIEVersionByRegistry ()
{
string version = "9.0";//win7自带
try
{
RegistryKey ieKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Internet Explorer");
if(ieKey == null)
{
return version;
}
version = ieKey.GetValue("Version").ToString();
//本机IE升级则存在此项
if (ieKey.GetValue("svcVersion") != null)
{
version = ieKey.GetValue("svcVersion").ToString();
}
}
catch { }
return version.Substring(0, version.IndexOf("."));
} private string GetIEVersionByWebControl ()
{
string version = (new WebBrowser()).Version.Major.ToString();
return version;
}
#endregion
//
private uint GetItemValueNeedCreat (int IEVersion)
{
uint version = 0x2328;
switch (IEVersion)
{
case 7: //7000 (0x1B58)     IE7
version = 0x1B58;
break;
case 8: // 8000 (0x1F40)     IE8
version = 0x1F40;
break;
case 9: //9000 (0×2328)    IE9
version = 0x2328;
break;
case 10: //10000(0×2710)    IE10
version = 0x2710;
break;
case 11: //11000(0×2af8)    IE11
version =0x2af8;
break;
default :
version = 0x2328;
break;
}
return version;
} private string GetItemNameNeedCreat ()
{
string keyName = "XXXXX.exe";
try
{
keyName = GetCurrentProessName();
}
catch { } return keyName;
} private string GetCurrentProessName ()
{
var process = Process.GetCurrentProcess();
string ProcessModuleName = Process.GetCurrentProcess().MainModule.ModuleName;
return ProcessModuleName;
} private void WriteToRegistry(string keyName,string itemName,object itemValue)
{
try
{
if (IsExistSetting( keyName, itemName, itemValue)) { return; }
RegistryKey root = Registry.LocalMachine;
RegistryKey key = root.OpenSubKey(keyName, true);
key.SetValue(itemName, itemValue, RegistryValueKind.DWord);
}
catch (Exception ex) //设置出错则使用客户电脑设置
{
}
} private bool IsExistSetting (string keyName, string itemName, object itemValue)
{
RegistryKey root = Registry.LocalMachine;
RegistryKey key = root.OpenSubKey(keyName, true);
if(key == null)
{
return false;
}
return key.GetValue(itemName,string.Empty).ToString() == itemValue.ToString();
}
}
}

记客户端WebBrowser控件修改版本的问题的更多相关文章

  1. Winfrom 中完美设置webbrowser控件内核版本

    前言 .NET 版本更新了一代又一代,winform中的webbrowser控件的IE内核版本却始终用的IE7,好多网站都对IE7已经不支持.webbrowser这个控件就显得有些鸡肋,经过查找大佬门 ...

  2. c# webbrowser控件内核版本强制修改

    int BrowserVer, RegVal; // get the installed IE version using (WebBrowser Wb = new WebBrowser()) Bro ...

  3. 在.net中修改Webbrowser控件的IE版本

    根据32位.64位系统来分别修改对应的注册表路径的键值对,不需要重启程序. /// <summary> /// 修改Webbrowser控件模拟的IE版本 /// </summary ...

  4. VC++使用WebBrowser控件,强制给控件指定版本显示网页

    转载:http://www.cnblogs.com/1175429393wljblog/p/5398928.html 最近为了抓取淘宝的成交数据,用C#的WebBrowser控件开发了一个简单的程序. ...

  5. [JavaScript]WebBrowser控件下IE版本的检测

    转载请注明原文地址:https://www.cnblogs.com/litou/p/10772272.htm 在客户端检查用户使用的浏览器类型和版本,都是根据navigator.userAgent属性 ...

  6. 修改WebBrowser控件的内核解决方案

    方法一 加入你想让WebBrowser控件的渲染模式编程IE8的标准模式, 你可以通过设置注册表FEATURE_BROWSER_EMULATION 来实现. 示例: 注册表中注明当前本机装的IE版本H ...

  7. 强制IE浏览器或WebBrowser控件使用指定版本显示网页

    自从装了IE10之后,就发现好些个网站显示都不是那么的正常,网站上有些功能竟然还会出现一些意想不到的BUG——本来就是针对IE开发的,现在IE下竟然用不起来了,让用户情何以堪?但是就为少量用户使用的系 ...

  8. C# 指定Webbrowser控件所用IE内核版本

    如果电脑上安装了IE8或者之后版本的IE浏览器,Webbrowser控件会使用IE7兼容模式来显示网页内容.解决方法是在注册表中为你的进程指定引用IE的版本号. 比如我的程序叫做a.exe,以64位机 ...

  9. PB打开ole控件IE浏览器版本问题_指定Webbrowser控件所用IE内核版本(转)

    如果电脑上安装了IE8或者之后版本的IE浏览器,Webbrowser控件会使用IE7兼容模式来显示网页内容.解决方法是在注册表中为你的进程指定引用IE的版本号. 比如我的程序叫做a.exe 对于32位 ...

随机推荐

  1. 国产网络测试仪MiniSMB - 利用Ctrl+c/Ctrl+v/Ctrl+a快速编辑数据流

    国产网络测试仪MiniSMB(www.minismb.com)是复刻smartbits的IP网络性能测试工具,是一款专门用于测试智能路由器,网络交换机的性能和稳定性的软硬件相结合的工具.可以通过此以太 ...

  2. pthread_create函数

    函数简介 pthread_create是UNIX环境创建线程函数 头文件 #include<pthread.h> 函数声明 int pthread_create(pthread_t *re ...

  3. 高并发之ReentrantLock、CountDownLatch、CyclicBarrier

    本系列研究总结高并发下的几种同步锁的使用以及之间的区别,分别是:ReentrantLock.CountDownLatch.CyclicBarrier.Phaser.ReadWriteLock.Stam ...

  4. 二分类问题中混淆矩阵、PR以及AP评估指标

    仿照上篇博文对于混淆矩阵.ROC和AUC指标的探讨,本文简要讨论机器学习二分类问题中的混淆矩阵.PR以及AP评估指标:实际上,(ROC,AUC)与(PR,AP)指标对具有某种相似性. 按照循序渐进的原 ...

  5. 前端 vs 后端

    前端 vs 后端 前端与后端: 有什么区别? 前端和后端是计算机行业中最常用的两个术语. 在某种程度上,它们成了流行语. 它们决定了您作为软件开发人员所从事的工作类型,所使用的技术以及所获得的收入. ...

  6. Beacon API

    Beacon API User Tracking https://caniuse.com/#feat=beacon Question & Solution Beacon API 不会延缓网页卸 ...

  7. Transporter iOS App

    Transporter iOS App apple store app store connect https://appstoreconnect.apple.com/ Transporter &am ...

  8. js animation & requestAnimationFrame

    js animation & requestAnimationFrame https://developer.mozilla.org/en-US/docs/Web/API/window/req ...

  9. PAUL ADAMS ARCHITECT:日本楼市仍保持稳定

    日本国土交通省从2008年11月开始,到2020年10月,连续追踪日本的公寓房价和日经指数两个数值的变动关联性,结果显示相关系数是0.935,也就是说在此期间,日本楼市和股市有着非常强的正相关. 保罗 ...

  10. NGK公链:去中心化交易+挖矿生态体系共舞

    NGK生态公链是一个安全.透明.专业的去中心化商业应用平台.作为一条具有技术信任甚至是公众信任的公链,NGK以区块链技术为支撑,利用区块链透明.公正.公开.数据不可篡改.分布式存储.可追溯等技术优势, ...