WebBrowserコントロールIE11化レジストリ登録


WebBrowserコントロール IE11化 自動レジストリ登録

VBでWebBrowserコントロールをよく使うのですが、IE7エンジンが自動で使われてしまいます。今時IE7ではレタリングなど多々問題がありますのでIE11化してみようと思います。

機能 管理者起動時、自動REG登録

WebBrowserCtrl IE11化するにはレジストリに書き込みの必要があります。管理者権限で起動した時、自動でレジストリに書込するプログラムを書いてみようとおもいます。まずはVBデザインにてWbCtrlを2つボタンを1つ配置します。

PathcEditor

class1を追加

元ネタ SpcialThanks


    Imports Microsoft.Win32
    Class SurroundingClass
        Public Shared Sub createRegistry()
            Dim filename As String = Process.GetCurrentProcess().MainModule.FileName
            filename = filename.Substring(filename.LastIndexOf("\"c) + 1, filename.Length - filename.LastIndexOf("\"c) - 1)
            If filename.Contains("vhost") Then filename = filename.Substring(0, filename.IndexOf("."c) + 1) & "exe"
            Registry.LocalMachine.OpenSubKey("SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", True).SetValue(filename, 11001, RegistryValueKind.DWord)
            Registry.LocalMachine.OpenSubKey("SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BEHAVIORS", True).SetValue(filename, 11001, RegistryValueKind.DWord)
            Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", True).SetValue(filename, 11001, RegistryValueKind.DWord)
            Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BEHAVIORS", True).SetValue(filename, 11001, RegistryValueKind.DWord)
        End Sub
        Public Shared Sub removeRegistry()
            Dim filename As String = Process.GetCurrentProcess().MainModule.FileName
            filename = filename.Substring(filename.LastIndexOf("\"c) + 1, filename.Length - filename.LastIndexOf("\"c) - 1)
            If filename.Contains("vhost") Then filename = filename.Substring(0, filename.IndexOf("."c) + 1) & "exe"
            Try
                Registry.LocalMachine.OpenSubKey("SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", True).DeleteValue(filename)
            Catch
            End Try
            Try
                Registry.LocalMachine.OpenSubKey("SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BEHAVIORS", True).DeleteValue(filename)
            Catch
            End Try
            Try
                Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", True).DeleteValue(filename)
            Catch
            End Try
            Try
                Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BEHAVIORS", True).DeleteValue(filename)
            Catch
            End Try
        End Sub
    End Class

デザインのコード

Imports System.DirectoryServices.AccountManagement
Public Class Form1
    Private myURLleft As Uri
    Private myURLright As Uri
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim adm As Boolean
        adm = IsAdministrator()
        '管理者で起動しているならWebbrowserIE11モードをregに登録
        If adm = True Then
            SurroundingClass.createRegistry()
            Dim cReg As New SurroundingClass()
            cReg.createRegistry()
            cReg = Nothing
        End If
        WebBrowser1.ScriptErrorsSuppressed = True
        myURLleft = New System.Uri("https://www.ugtop.com/spill.shtml")
        WebBrowser1.Navigate(myURLleft)
        WebBrowser2.ScriptErrorsSuppressed = True
        myURLright = New System.Uri("https://www.tcoop.or.jp/efriends/browsercheck.html")
        WebBrowser2.Navigate(myURLright)
    End Sub
    'アドミンで起動しているか判定
    Private Function IsAdministrator() As Boolean
        Dim identity = System.Security.Principal.WindowsIdentity.GetCurrent
        Dim principal = New System.Security.Principal.WindowsPrincipal(identity)
        Return principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator)
    End Function
    '読込後なんかする。
    Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    End Sub
End Class

初回起動時に管理者権限で起動し自動でレジストリに追記、次回からは通常起動でもIE11エンジンが使われます。またVB2017デバッグ時でもVB2017を管理者権限で起動すればデバッグ先もokみたいです。

PathcEditor

Uninstall時は

元ネタのほうではレジストリのリムーブがついてますが、ソフトにリムーブ機能がついているのもちょっと妙ですのでUninstall.regをつくります。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
"プロジェクト名.exe"=-

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BEHAVIORS]
"プロジェクト名.exe"=-

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
"プロジェクト名.exe"=-

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BEHAVIORS]
"プロジェクト名.exe"=-

※プロジェクト名を適宜かきかえてください。

参考リンク Spcial thanks

c# WebBrowserCrtl IE11
logo