保留在本地電腦的一篇記錄,第二條描述是在網上看來的,忘記在哪看的了,也就沒注明出處,望見諒,
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;
}/*創建時間:
*創建用途:對固定注冊表項進行修改,使得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 = https://www.cnblogs.com/imzx/archive/2020/09/28/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();
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/134796.html
標籤:.NET技术
