vb.netinternet-explorerprocessstartinfowindow-handles

Is there a way to open an IE window with a user-defined name. When same URL opened, already opened IE window comes to foreground


Here is my requirement which I intend to implement. There is one window application showing some icons which take me to different web sites. When I click on one of the icons, it should open an IE window and append a customized name to it.

So, before opening any website after I click on website icon, I want to check if there is already an IE window open with that customized name, if yes, bring that already opened window to the foreground. If not, open a new IE window.

I have checked various questions posted which are related to what I am looking to achieve, but am somehow not able to get it right. Below is my attempt.

For Each e In shellWins
    If InStr(1, e.GetProperty("IEWindowName"), namedWindow, CompareMethod.Text) <> 0 Then
        hWnd = e.HWND   
        myIE = e
    End If
Next

If hWnd == -1
    Dim p As New Process
        Dim psi As New ProcessStartInfo(IEPath, webSiteURL)
        p.StartInfo = psi  'Trying to open a new IE window
        p.Start()                   

        For Each ie In shellWins
            If ie.hwdn = p.MainWindowHandle Then
                ie.PutProperty("IEWindowName", namedWindow)         
            End If
        Next
End if 

Else
myIE.BringToForeground()

This sometime works and sometimes does not. Is there any better way to do it?


Solution

  • It doesn't work in which situation? Does there any error throw when it doesn't work? If there is, please tell us the detailed error information and in which line it occurs.

    Besides, you could try to compare the url to check if the website is already open in IE like this:

    Sub Main()
            Dim shellWins As SHDocVw.ShellWindows
            Dim explorer As SHDocVw.InternetExplorer
    
            shellWins = New SHDocVw.ShellWindows
            Dim SQuery As String = "https://www.example.com/"
            For Each explorer In shellWins
                If explorer.Application.Name = "Internet Explorer" And explorer.LocationURL.Contains(SQuery) Then
                    explorer.BringToForeground()
                End If
            Next
    
            shellWins = Nothing
            explorer = Nothing
    End Sub