WebBrowserコントロール IE11化 自動レジストリ登録
VBでWebBrowserコントロールをよく使うのですが、IE7エンジンが自動で使われてしまいます。今時IE7ではレタリングなど多々問題がありますのでIE11化してみようと思います。
機能 管理者起動時、自動REG登録
WebBrowserCtrl IE11化するにはレジストリに書き込みの必要があります。管理者権限で起動した時、自動でレジストリに書込するプログラムを書いてみようとおもいます。まずはVBデザインにてWbCtrlを2つボタンを1つ配置します。
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みたいです。
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"=-
※プロジェクト名を適宜かきかえてください。