Página 1 de 1

Cómo saber si una página web ya fue abierta

Publicado: Mié Mar 04, 2020 2:43 pm
por Longi
Buenas!

En los botones de los formularios hay una opción muy útil que nos deja abrir una página WEB sin problemas al poner en 'Acción' Abrir documento/página Web, y en URL la dirección de la página que quieres abrir.
En macro puedes usar algo así como:

Código: Seleccionar todo

Sub explor ()

    Dim URL,WshShell                                                                        
    Set WshShell = CreateObject("WScript.shell")                                            ' Iniciamos WScript.shell
    '-----------------------------------------------------------
    ' Abrimos una página en concreto con el explorador que queremos
    
    URL = "https://novedades.orange.es"                                                     ' página de publicidad
    WshShell.run "CMD /C start iexplore.exe " & URL & "",0,False                            ' Abre el explorer con la página anteriormente solicitada

End Sub
Aunque creo que solo en Windows.
Bien!, estoy intentando hacer una automatización en la que se abre una página web por código, y se me plantea la duda de cómo enterarme de que ya está abierta dicha página para, si aplico un ciclo, no abrir la misma página tantas veces como el ciclo imponga. Con la primera sería suficiente.

Gracias a todos por leer.

Un saludo! ;)

Ah! el código abre explorer directamente, pero estaría fantástico recorrer varios exploradores para ver si la página está abierta en alguno de ellos (al haber varios usuarios cada uno puede tener un explorador diferente como predefinido).

Re: Cómo saber si una página web ya fue abierta

Publicado: Mié Mar 04, 2020 3:11 pm
por mauricio
¿De verdad todavía alguien usa iExplore? :D

De tu firma... ¿estas usando LibO 6.3 / Win 10 ?

Creo recordar que hay forma, primero de detectar si un programa esta abierto, con llamadas al API de Windows... lo busco y te aviso...

Re: Cómo saber si una página web ya fue abierta

Publicado: Mié Mar 04, 2020 4:18 pm
por Longi
Actualicé la firma, que hay cosas que por falta de costumbre no se hacen.....
Yo uso Firefox, pero en el entorno en el que me muevo hay alguna aplicación web que solo es compatible con Explorer, así que sí, aún se usa.....
Son las cosas del querer....

Otro saludo!

Re: Cómo saber si una página web ya fue abierta

Publicado: Mar Mar 24, 2020 3:36 pm
por Longi
Buenas!

He hecho la mitad del primer paso: el código que pongo nos indica si explore, chrome o mozilla están abiertos (faltarían edge, safari y cualquier otro que la gente use, pero desconozco las clases de cada uno de ellos).
El siguiente paso será hacer ciclo en los abiertos para recorrer en cada uno de ellos todas sus páginas abiertas.
Una vez localizada la página habría que mirar si en ella está abierta una página en concreto. Si no es así, pasar a la siguiente, y así hasta finalizar las páginas del navegador inspeccionado y pasar al siguiente navegador abierto (si lo hubiere, claro está).

Código: Seleccionar todo

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (lpClassName,lpWindowName) As Long

Sub Comprobar

    Dim ret As Long, ArrayNavegadores(), Clas As String, Pro As String                      ' Variables

    ArrayNavegadores() = Array("IEFrame", "MozillaWindowClass", "Chrome_WidgetWin_1")       ' Array de clases de los navegadores
    '----------------------------------------
    ' Recorremos todas las clases
    
    For i= LBound(ArrayNavegadores()) To UBound(ArrayNavegadores())                         ' Ciclo que recorre el array
    Clas=ArrayNavegadores(i)                                                                ' La clase del momento
    ret = FindWindow(clas, NULL)                                                            ' Llama la función
    '---------------------------------------
    ' Traducimos al nombre del explorador
    
    If Clas= "IEFrame" Then                                                                 ' Si la clase es IEFrame   
      Pro= "Explorer"                                                                       ' Es Explorer
    End if                                                                                  ' Acaba la condición

    If Clas= "MozillaWindowClass" Then                                                      ' Si la clase es MozillaWindowClass
      Pro= "Mozilla"                                                                        ' Es Mozilla
    End if                                                                                  ' Acaba la condición

    If Clas= "Chrome_WidgetWin_1" Then                                                      ' Si la clase es Chrome_WidgetWin_1
      Pro= "Chrome"                                                                         ' Es Chrome
    End if                                                                                  ' Acaba la condición
    '----------------------------------------
    ' si ret es distinto de 0 es porque la encontró

    If ret <> 0 Then                                                                        ' Si es distinto de 0
        MsgBox "La aplicación  " & Pro & "  está abierta"                                   ' Nos avisa de que el navegador está abierto
    Else                                                                                    ' Si es 0
        MsgBox "La aplicación  " & Pro & "  NO está abierta"                                ' Nos avisa de que el navegador no está abierto
    End If                                                                                  ' Acaba la condición
    Next                                                                                    ' Vamos al siguiente elemento del array

End Sub
Por supuesto, solo vale para Windows, pero si a alguien se le ocurre una alternativa para linux seguro que a otros les vendrá bien.
Agradecería las clases de los otros navegadores y también si alguien aporta cómo seguir con el esquema expuesto más arriba.

Gracias y un saludo! ;)