Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Mauricio De Abreu en 12 Enero 2022, 23:13 pm



Título: Poner imagen en pantalla completa
Publicado por: Mauricio De Abreu en 12 Enero 2022, 23:13 pm
Buenas tardes amigos.

Antes que nada pido disculpas si he posteado en un foro erroneo.

El asunto es que tengo este código, que pone en pantalla completa una imagen que fue abierta con el Visor de imagenes de Windows desde un archivo Batch.

Código:
Dim WshShell

Set WshShell = WScript.CreateObject("WScript.Shell")

Wscript.Sleep 4

' Alt+Shift+Enter

WshShell.Sendkeys "+%{ENTER}"

'WshShell.Sendkeys "+%~

'F11

'WshShell.SendKeys "{F11}"

WScript.Quit

Como pueden ver, he probado dos metodos de Alt+Shift+Enter, y uno de F11, los cuales funcionan en mi Desktop, todas y cada una de las veces que ejecuto el codigo, pero en la Laptop del trabajo, funciona la primera vez y despues no pone en pantalla completa la imagen.

Alguien sabrá que estoy haciendo mal, o hay que cambiar algo en el codigo ¿?

Agradecido de antemano por la ayuda que me puedan brindar.


Título: Re: Poner imagen en pantalla completa
Publicado por: EdePC en 13 Enero 2022, 01:28 am
Quizá esté perdiendo el Foco del programa y no se le está enviando los SendKeys al programa correcto. Una alternativa es Activar la ventana y enviarle el SendKeys

Código
  1. set Sh = WScript.CreateObject("WScript.Shell")
  2. Sh.AppActivate "foto.jpg - Visualizador de fotos de Windows"
  3. Sh.SendKeys "{F11}"

El detalle es el Título de la ventana a activar, el Visualizador de fotos de Windows tiene su Título cambiante de acuerdo al nombre de la foto, tienes que considerar eso.

Todo esto sin considerar otras cosas como el visualizador por defecto, como estás abriendo la imagen, Windows 10 y 11 traen otro visualizador aunque siempre es posible activar el viejo, el Alt + Shift + Enter previo puede que haga el problema, etc


Título: Re: Poner imagen en pantalla completa
Publicado por: Mauricio De Abreu en 13 Enero 2022, 14:01 pm
Gracias por responder.

Lo que comentas es totalmente cierto y es parte del problema, las pruebas las he estado haciendo en Win 10 (Casa y trabajo).

Lo otro es que el Batch (cuando lo termine) debo adaptarlo a Win Xp, Win Seven y Win 10.

Por lo que supongo que presentara mas que un reto colocar parte del titulo de la ventana (si se pudiera).

Por otro lado, las imágenes son diferentes dependiendo de la alerta que deba mostrarse, en total son 9 alertas en formato PNG cuyo tamaño es la resolución del monitor, y todas se levantan desde el archivo Batch.

El Vbs lo uso para poner la imagen en pantalla completa para que el operador no obvie, o pase por alto la alerta.

Así que no se como hacer para resolver el problema, si alguien tiene una idea  se lo agradecería mucho.

Edicion:

De hecho, una de las cosas extrañas que pasan (en la laptop), es que al mostrar la imagen de la alerta, si yo manualmente trato de maximizarla con F11 o Alt + Shift + Enter, esta no se pone en pantalla completa. Pero en la Desktop de la casa si.

Sera otra cosa lo que impide que funcione bien el VBS ¿?


Título: Re: Poner imagen en pantalla completa
Publicado por: EdePC en 14 Enero 2022, 00:06 am
Correcto, pues para compatibilidad y de interfaz gráfica se usa mshta.exe que funciona en Windows XP, Vista, 7, 8, 8.1, 10 y 11. Básicamente es un mini Internet Explorer y puede interpretar código HTML, javascript, VBScript, JScript y CSS.

Como es algo sencillo lo que pides (mostrar una imagen en pantalla completa), basta con invocarlo directamente así:

Código:
mshta "about:<hta:application border=none contextmenu=no scroll=no windowstate=maximize /><img src='%userprofile%\desktop\img\imagen.jpg' width=100% />"

La ruta a la imagen debe ser absoluta
Como se muestra sin bordes y maximizado el resultante será una pantalla completa PERO para cerrarlo hay que dar Alt + F4
Si no se quitan los bordes y se especifica maximizado el resultado será una ventana maximizada que tiene sus botones para cerrar y no se oculta la barra de tareas

Para llamarlo desde un batch (.cmd o .bat) basta con lo descrito anteriormente, pero para hacerlo desde un .vbs se debe usar algo similar a esto (este ejemplo usa barra de título):

Código
  1. Set sh = WScript.CreateObject("WScript.Shell")
  2. img = sh.ExpandEnvironmentStrings("%UserProfile%") & "\Desktop\img.jpg"
  3. txt = "about:<hta:application contextmenu=no scroll=no windowstate=maximize /><title>Hola Mundo</title><img src='" & img & "' width=100% />"
  4. sh.Run("mshta """ & txt & """")

Considera que Windows XP el escritorio es "Escritorio" en lugar "Desktop" pero asumo que la ruta a la imagen la vas a preparar antes


Título: Re: Poner imagen en pantalla completa
Publicado por: Mauricio De Abreu en 14 Enero 2022, 14:51 pm
Muchas gracias por responder.

Como es algo sencillo lo que pides (mostrar una imagen en pantalla completa), basta con invocarlo directamente así:

Código:
mshta "about:<hta:application border=none contextmenu=no scroll=no windowstate=maximize /><img src='%userprofile%\desktop\img\imagen.jpg' width=100% />"

No tenia idea del mshta, es Excelente!!, y prefiero usarlo en el Batch, así reduzco código y archivo

Cambie el 100 por la resolución de la pantalla 1366, ya que la imagen quedaba en la esquina superior izquierda de un tamaño pequeño.

Pero tengo una duda, queda una especie de marco en L sobre la imagen, hay forma de quitarlo ?

(https://i.postimg.cc/RNhnfXzs/imagen.png) (https://postimg.cc/RNhnfXzs)

Agradecido de antemano por la ayuda.


Título: Re: Poner imagen en pantalla completa
Publicado por: EdePC en 14 Enero 2022, 19:11 pm
No es solo 100 sino 100% para que independientemente de la resolución la imagen siempre ocupe el todo el ancho visible

Con respecto al margen (marco L), pues por defecto se le agrega un margen al body (no sé si estés familiarizado con HTMl, CSS, JS), pero siempre puedes quitarlo con Estilos:

Código:
mshta "about:<hta:application contextmenu=no scroll=no windowstate=maximize caption=no /><style>body{margin:0}</style><img src='%userprofile%\escritorio\img.jpg' width=100%>"

Ese ejemplo también muestra en pantalla completa pero esta vez gracias al caption=no
Se puede ver la etiqueta <style></style>, dentro se ponen reglas CSS, en este caso margin:0 quita el margen del body

---
Pues claro! XD, si estás ejecutando en un .bat o .cmd hay que escapar los % cuando no son para variables, es decir, hay que ponerlo dos veces, esto si debe funcionar:

Código:
mshta "about:<hta:application contextmenu=yes scroll=no windowstate=maximize caption=no /><style>body{margin:0}</style><img src='%userprofile%\escritorio\img.jpg' width=100%%>"


Título: Re: Poner imagen en pantalla completa
Publicado por: Mauricio De Abreu en 16 Enero 2022, 16:32 pm
Pido disculpas por la demora en responder, las actividades laborales se incrementaron a tal punto que no había podido ingresar al foro.

Antes que nada, quiero dar las gracias por responder.

El código ha funcionado perfectamente, desde el Batch, ahora cubre por completo la pantalla y funciona perfectamente en los 3 sistemas operativos.

Código:
mshta "about:<hta:application contextmenu=yes scroll=no windowstate=maximize caption=no /><style>body{margin:0}</style><img src='%userprofile%\escritorio\img.jpg' width=100%%>"

Podemos dar por concluida la consulta.

Gracias nuevamente.