有没有办法用用户定义的名称打开 IE window。当相同的 URL 打开时,已经打开的 IE window 进入前台

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

这是我打算实现的要求。有一个 window 应用程序显示了一些图标,这些图标将我带到不同的网站。当我单击其中一个图标时,它应该打开一个 IE window 并为其附加一个自定义名称。

所以,在我点击网站图标后打开任何网站之前,我想检查是否已经有一个 IE window 使用该自定义名称打开,如果是,请带上已经打开的 window 到前台。如果没有,请打开一个新的 IE window.

我已经检查了与我希望实现的目标相关的各种问题,但不知何故无法正确解决。下面是我的尝试。

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()

这有时有效,有时无效。有没有更好的方法呢?

在什么情况下不起作用?当它不起作用时是否有任何错误抛出?如果有,请告诉我们详细的错误信息以及出现在哪一行。

此外,您可以尝试比较 url 以检查该网站是否已在 IE 中打开,如下所示:

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