//通常情況下,我們直接調用C#的webBrowser控件,默認的瀏覽器內核是IE7。 那么如何修改控件調用的默認瀏覽器版本呢?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Microsoft.Win32;
namespace TaoMoban
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
try
{
int IEversion = GetBrowserVersion();
if (IEversion >= 11)
{
SetWebBrowserFeatures(11);
}
else {
MessageBox.Show("你的瀏覽器版本(" + IEversion + ")太低,本程序需要系統安裝IE11以上版本瀏覽器");
}
}
catch(Exception ex) {
MessageBox.Show("" +ex.Message );
}
}
/// <summary>
/// 修改注冊表信息來兼容當前程序
/// </summary>
static void SetWebBrowserFeatures(int ieVersion)
{
//獲取程序及名稱
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);
//不曉得設置有什么用
Registry.SetValue(featureControlRegKey + "FEATURE_ENABLE_CLIPCHILDREN_OPTIMIZATION",
appName, 1, 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("不支持的瀏覽器版本!IE" + browserVersion);
}
return browserVersion;
}
/// <summary>
/// 通過版本得到瀏覽器模式的值
/// </summary>
/// <param name="browserVersion"></param>
/// <returns></returns>
static UInt32 GeoEmulationModee(int browserVersion)
{
UInt32 mode = 11000; // Internet Explorer 11
switch (browserVersion)
{
case 7:
mode = 7000; // Internet Explorer 7
break;
case 8:
mode = 8000; // Internet Explorer 8
break;
case 9:
mode = 9000; // Internet Explorer 9
break;
case 10:
mode = 10000; // Internet Explorer 10.
break;
case 11:
mode = 11000; // Internet Explorer 11
break;
}
return mode;
}
}
}