본문 바로가기
VB.net

WebBrowser IE 버전 매칭

by 호야호잇 2021. 7. 23.
  Public Function GetEmbVersion() As Integer
        Dim ieVer As Integer = GetBrowserVersion()
        If ieVer > 9 Then Return ieVer * 1000 + 1  'IE 10/11 이상
        If ieVer > 7 Then Return ieVer * 1111   'IE 8/9
    End Function

    Public Sub FixBrowserVersion()
        Dim appName As String = System.IO.Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetExecutingAssembly().Location)
        FixBrowserVersion(appName)
        FixBrowserVersion("devenv")   '개발자용 전용
    End Sub

    Public Sub FixBrowserVersion(ByVal appName As String)
        FixBrowserVersion(appName, GetEmbVersion())
    End Sub
    Public Sub FixBrowserVersion(ByVal appName As String, ByVal ieVer As Integer)
        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

    Private Sub FixBrowserVersion_Internal(ByVal root As String, ByVal appName As String, ByVal ieVer As Integer)
        Try
            If Environment.Is64BitOperatingSystem Then
                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)
            End If

        Catch __unusedException1__ As Exception
        End Try
    End Sub

    Public Function GetBrowserVersion() As Integer
        Dim strKeyPath As String = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer"
        Dim ls As String() = New String() {"svcVersion", "svcUpdateVersion", "Version", "W2kVersion"}
        Dim maxVer As Integer = 0

        For i As Integer = 0 To ls.Length - 1
            Dim objVal As Object = Microsoft.Win32.Registry.GetValue(strKeyPath, ls(i), "0")
            Dim strVal As String = System.Convert.ToString(objVal)

            If strVal IsNot Nothing Then
                Dim iPos As Integer = strVal.IndexOf("."c)
                If iPos > 0 Then strVal = strVal.Substring(0, iPos)
                Dim res As Integer = 0
                If Integer.TryParse(strVal, res) Then maxVer = Math.Max(maxVer, res)
            End If
        Next

        Return maxVer
    End Function