Tôi đã thấy câu trả lời của Veer. Tôi nghĩ nó đúng, nhưng nó không hiệu quả với tôi. Có lẽ tôi đang sử dụng .NET 4 và đang sử dụng hệ điều hành 64x nên vui lòng kiểm tra điều này.
Bạn có thể cài đặt hoặc kiểm tra nó khi khởi động ứng dụng của mình:
private void Form1_Load(object sender, EventArgs e)
{
var appName = Process.GetCurrentProcess().ProcessName + ".exe";
SetIE8KeyforWebBrowserControl(appName);
}
private void SetIE8KeyforWebBrowserControl(string appName)
{
RegistryKey Regkey = null;
try
{
if (Environment.Is64BitOperatingSystem)
Regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\\Wow6432Node\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION", true);
else
Regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION", true);
if (Regkey == null)
{
MessageBox.Show("Application Settings Failed - Address Not found");
return;
}
string FindAppkey = Convert.ToString(Regkey.GetValue(appName));
if (FindAppkey == "8000")
{
MessageBox.Show("Required Application Settings Present");
Regkey.Close();
return;
}
if (string.IsNullOrEmpty(FindAppkey))
Regkey.SetValue(appName, unchecked((int)0x1F40), RegistryValueKind.DWord);
FindAppkey = Convert.ToString(Regkey.GetValue(appName));
if (FindAppkey == "8000")
MessageBox.Show("Application Settings Applied Successfully");
else
MessageBox.Show("Application Settings Failed, Ref: " + FindAppkey);
}
catch (Exception ex)
{
MessageBox.Show("Application Settings Failed");
MessageBox.Show(ex.Message);
}
finally
{
if (Regkey != null)
Regkey.Close();
}
}
Bạn có thể tìm thấy messagebox.show, chỉ để thử nghiệm.
Các phím như sau:
11001 (0x2AF9) - Internet Explorer 11. Các trang web được hiển thị ở chế độ cạnh IE11, bất kể !DOCTYPE
chỉ thị nào.
11000 (0x2AF8) - Internet Explorer 11. Các trang web chứa !DOCTYPE
chỉ thị dựa trên tiêu chuẩn được hiển thị ở chế độ cạnh IE11. Giá trị mặc định cho IE11.
10001 (0x2711) - Internet Explorer 10. Các trang web được hiển thị ở chế độ Tiêu chuẩn IE10, bất kể !DOCTYPE
chỉ thị nào.
10000 (0x2710) - Internet Explorer 10. Các trang web chứa !DOCTYPE
chỉ thị dựa trên tiêu chuẩn
được hiển thị trong chế độ Tiêu chuẩn IE10. Giá trị mặc định cho Internet Explorer 10.
9999 (0x270F) - Internet Explorer 9. Các trang web được hiển thị ở chế độ Tiêu chuẩn IE9, bất kể !DOCTYPE
chỉ thị nào.
9000 (0x2328) - Internet Explorer 9. Các trang web chứa !DOCTYPE
chỉ thị dựa trên tiêu chuẩn được hiển thị ở chế độ IE9.
8888 (0x22B8) - Các trang web được hiển thị ở chế độ Tiêu chuẩn IE8, bất kể !DOCTYPE
chỉ thị nào.
8000 (0x1F40) - Các trang web chứa !DOCTYPE
chỉ thị dựa trên tiêu chuẩn được hiển thị ở chế độ IE8.
7000 (0x1B58) - Các trang web chứa các !DOCTYPE
chỉ thị dựa trên tiêu chuẩn được hiển thị ở chế độ Tiêu chuẩn IE7.
Tham khảo: MSDN: Internet Feature Controls
Tôi thấy các ứng dụng như Skype sử dụng 10001. Tôi không biết.
GHI CHÚ
Ứng dụng thiết lập sẽ thay đổi sổ đăng ký. Bạn có thể cần thêm một dòng trong Tệp kê khai để tránh lỗi do quyền thay đổi trong sổ đăng ký:
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
CẬP NHẬT 1
Đây là lớp sẽ nhận được phiên bản IE mới nhất trên windows và thực hiện các thay đổi cần thiết;
public class WebBrowserHelper
{
public static int GetEmbVersion()
{
int ieVer = GetBrowserVersion();
if (ieVer > 9)
return ieVer * 1000 + 1;
if (ieVer > 7)
return ieVer * 1111;
return 7000;
}
public static void FixBrowserVersion()
{
string appName = System.IO.Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetExecutingAssembly().Location);
FixBrowserVersion(appName);
}
public static void FixBrowserVersion(string appName)
{
FixBrowserVersion(appName, GetEmbVersion());
}
public static void FixBrowserVersion(string appName, int ieVer)
{
FixBrowserVersion_Internal("HKEY_LOCAL_MACHINE", appName + ".exe", ieVer);
FixBrowserVersion_Internal("HKEY_CURRENT_USER", appName + ".exe", ieVer);
FixBrowserVersion_Internal("HKEY_LOCAL_MACHINE", appName + ".vshost.exe", ieVer);
FixBrowserVersion_Internal("HKEY_CURRENT_USER", appName + ".vshost.exe", ieVer);
}
private static void FixBrowserVersion_Internal(string root, string appName, int ieVer)
{
try
{
if (Environment.Is64BitOperatingSystem)
Microsoft.Win32.Registry.SetValue(root + @"\Software\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", appName, ieVer);
else
Microsoft.Win32.Registry.SetValue(root + @"\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", appName, ieVer);
}
catch (Exception)
{
}
}
public static int GetBrowserVersion()
{
string strKeyPath = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer";
string[] ls = new string[] { "svcVersion", "svcUpdateVersion", "Version", "W2kVersion" };
int maxVer = 0;
for (int i = 0; i < ls.Length; ++i)
{
object objVal = Microsoft.Win32.Registry.GetValue(strKeyPath, ls[i], "0");
string strVal = System.Convert.ToString(objVal);
if (strVal != null)
{
int iPos = strVal.IndexOf('.');
if (iPos > 0)
strVal = strVal.Substring(0, iPos);
int res = 0;
if (int.TryParse(strVal, out res))
maxVer = Math.Max(maxVer, res);
}
}
return maxVer;
}
}
sử dụng lớp như sau
WebBrowserHelper.FixBrowserVersion();
WebBrowserHelper.FixBrowserVersion("SomeAppName");
WebBrowserHelper.FixBrowserVersion("SomeAppName",intIeVer);
bạn có thể gặp phải vấn đề về khả năng so sánh của windows 10, có thể do chính trang web của bạn, bạn có thể cần thêm thẻ meta này
<meta http-equiv="X-UA-Compatible" content="IE=11" >
Thưởng thức :)