Vi la respuesta de Veer. Creo que está bien, pero no funcionó para mí. Tal vez estoy usando .NET 4 y estoy usando el sistema operativo 64x, así que verifique esto.
Puede configurarlo o verificarlo al iniciar su aplicación:
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();
}
}
Puede encontrar messagebox.show, solo para probar.
Las claves son las siguientes:
11001 (0x2AF9) : Internet Explorer 11. Las páginas web se muestran en el modo de borde IE11, independientemente de la !DOCTYPE
directiva.
11000 (0x2AF8) : Internet Explorer 11. Las páginas web que contienen !DOCTYPE
directivas basadas en estándares se muestran en el modo de borde IE11. Valor predeterminado para IE11.
10001 (0x2711) : Internet Explorer 10. Las páginas web se muestran en el modo de estándares IE10, independientemente de la !DOCTYPE
directiva.
10000 (0x2710) : Internet Explorer 10. Las páginas web que contienen !DOCTYPE
directivas basadas
en estándares se muestran en el modo de estándares IE10. Valor predeterminado para Internet Explorer 10.
9999 (0x270F) : Internet Explorer 9. Las páginas web se muestran en el modo de estándares IE9, independientemente de la !DOCTYPE
directiva.
9000 (0x2328) : Internet Explorer 9. Las páginas web que contienen !DOCTYPE
directivas basadas en estándares se muestran en modo IE9.
8888 (0x22B8) : las páginas web se muestran en el modo de estándares IE8, independientemente de la !DOCTYPE
directiva.
8000 (0x1F40) : las páginas web que contienen !DOCTYPE
directivas basadas en estándares se muestran en modo IE8.
7000 (0x1B58) : las páginas web que contienen !DOCTYPE
directivas basadas en estándares se muestran en el modo de estándares IE7.
Referencia: MSDN: Controles de funciones de Internet
Vi que aplicaciones como Skype usaban 10001. No lo sé.
NOTA
La aplicación de instalación cambiará el registro. Es posible que deba agregar una línea en el archivo de manifiesto para evitar errores debido a los permisos de cambio en el registro:
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
ACTUALIZACIÓN 1
Esta es una clase que obtendrá la última versión de IE en Windows y realizará los cambios necesarios;
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;
}
}
uso de la clase de la siguiente manera
WebBrowserHelper.FixBrowserVersion();
WebBrowserHelper.FixBrowserVersion("SomeAppName");
WebBrowserHelper.FixBrowserVersion("SomeAppName",intIeVer);
es posible que tenga un problema en la comparabilidad de Windows 10, puede que debido a su sitio web en sí, deba agregar esta metaetiqueta
<meta http-equiv="X-UA-Compatible" content="IE=11" >
Disfruta :)