Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Use latest version of Internet Explorer in the webbrowser control

The default version of the webbrowser control in a C# Windows Forms application is 7. I have changed to 9 by the article Browser Emulation, but how is it possible to use the latest version of the installed Internet Explorer in a webbrowser control?

like image 375
Moslem7026 Avatar asked Jul 29 '13 11:07

Moslem7026


People also ask

What is WebBrowser control?

The WebBrowser control provides a managed wrapper for the WebBrowser ActiveX control. The managed wrapper lets you display Web pages in your Windows Forms client applications.

What is allow scripting Microsoft WebBrowser control?

This policy setting determines whether a page can control embedded WebBrowser controls via script. If you enable this policy setting, script access to the WebBrowser control is allowed.


1 Answers

I saw Veer's answer. I think it's right, but it did not I work for me. Maybe I am using .NET 4 and am using 64x OS so kindly check this.

You may put in setup or check it in start-up of your application:

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     {         // For 64 bit machine         if (Environment.Is64BitOperatingSystem)             Regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\\Wow6432Node\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION", true);         else  //For 32 bit machine             Regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION", true);          // If the path is not correct or         // if the user haven't priviledges to access the registry         if (Regkey == null)         {             MessageBox.Show("Application Settings Failed - Address Not found");             return;         }          string FindAppkey = Convert.ToString(Regkey.GetValue(appName));          // Check if key is already present         if (FindAppkey == "8000")         {             MessageBox.Show("Required Application Settings Present");             Regkey.Close();             return;         }          // If a key is not present add the key, Key value 8000 (decimal)         if (string.IsNullOrEmpty(FindAppkey))             Regkey.SetValue(appName, unchecked((int)0x1F40), RegistryValueKind.DWord);          // Check for the key after adding         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     {         // Close the Registry         if (Regkey != null)             Regkey.Close();     } } 

You may find messagebox.show, just for testing.

Keys are as the following:

  • 11001 (0x2AF9) - Internet Explorer 11. Webpages are displayed in IE11 edge mode, regardless of the !DOCTYPE directive.

  • 11000 (0x2AF8) - Internet Explorer 11. Webpages containing standards-based !DOCTYPE directives are displayed in IE11 edge mode. Default value for IE11.

  • 10001 (0x2711)- Internet Explorer 10. Webpages are displayed in IE10 Standards mode, regardless of the !DOCTYPE directive.

  • 10000 (0x2710)- Internet Explorer 10. Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode. Default value for Internet Explorer 10.

  • 9999 (0x270F) - Internet Explorer 9. Webpages are displayed in IE9 Standards mode, regardless of the !DOCTYPE directive.

  • 9000 (0x2328) - Internet Explorer 9. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode.

  • 8888 (0x22B8) - Webpages are displayed in IE8 Standards mode, regardless of the !DOCTYPE directive.

  • 8000 (0x1F40) - Webpages containing standards-based !DOCTYPE directives are displayed in IE8 mode.

  • 7000 (0x1B58) - Webpages containing standards-based !DOCTYPE directives are displayed in IE7 Standards mode.

Reference: MSDN: Internet Feature Controls

I saw applications like Skype use 10001. I do not know.

NOTE

The setup application will change the registry. You may need to add a line in the Manifest File to avoid errors due to permissions of change in registry:

<requestedExecutionLevel level="highestAvailable" uiAccess="false" /> 

UPDATE 1

This is a class will get the latest version of IE on windows and make changes as should be;

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;     } // End Function GetEmbVersion      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());     } // End Sub FixBrowserVersion      // FixBrowserVersion("<YourAppName>", 9000);     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);     } // End Sub FixBrowserVersion       private static void FixBrowserVersion_Internal(string root, string appName, int ieVer)     {         try         {             //For 64 bit Machine              if (Environment.Is64BitOperatingSystem)                 Microsoft.Win32.Registry.SetValue(root + @"\Software\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", appName, ieVer);             else  //For 32 bit Machine                  Microsoft.Win32.Registry.SetValue(root + @"\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", appName, ieVer);           }         catch (Exception)         {             // some config will hit access rights exceptions             // this is why we try with both LOCAL_MACHINE and CURRENT_USER         }     } // End Sub FixBrowserVersion_Internal       public static int GetBrowserVersion()     {         // string strKeyPath = @"HKLM\SOFTWARE\Microsoft\Internet Explorer";         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);             } // End if (strVal != null)          } // Next i          return maxVer;     } // End Function GetBrowserVersion    } 

using of class as followed

WebBrowserHelper.FixBrowserVersion(); WebBrowserHelper.FixBrowserVersion("SomeAppName"); WebBrowserHelper.FixBrowserVersion("SomeAppName",intIeVer); 

you may face a problem for in comparability of windows 10, may due to your website itself you may need to add this meta tag

<meta http-equiv="X-UA-Compatible" content="IE=11" > 

Enjoy :)

like image 112
Mhmd Avatar answered Sep 29 '22 11:09

Mhmd