El Blog de Gualtrysoft

Windows 2000/2003/2008, Active Directory, VBScript, Hyper-V, PowerShell y todo aquello interesante a la hora de usar, configurar y administrar Windows Server. También tenemos longanizas…

Script Para Guardar Capturas de Pantalla Cada Hora

Posted by urpiano en Martes 21 \21\UTC noviembre \21\UTC 2006

Este script lo he desarrollado ante la necesidad de conseguir que se guardara una captura de pantalla cada hora desde una página de estadísticas de mi empresa.

Uno podría pensar que es muy fácil, se ejecuta un script que cada hora genere una pulsación de la tecla Impr. Pant., que abra Paint, pegue y guarde el fichero correspondiénte; no se trata más que de crear un objeto wshShell con el que generar las pulsaciones de teclas con el método SendKeys y de abrir Paint con el método Run o Exec y cerrarlo también con SendKeys (F4). Por desgracia, esto que sería tan fácil, no es posible hacerlo, pues SendKeys no permite generar ni Impr. Pant., ni Ctrl+C, ni Ctrl+V; es decir, que no podemos trabajar con el portapapeles de Windows desde VBScript.

Para poder usar el portapapeles desde VBScript, el truco que se suele recomendar es utilizar una instancia de Internet Explorer, pero por más que he buscado, no he encontrado la manera de copiar al portapapeles de Internet Explorer una captura de pantalla, sólo puedes copiar una imagen desde un archivo:

Hey, Scripting Guy: How Can I Grab a URL From the Clipboard and Then Open That Web Site in a Browser
http://www.microsoft.com/technet/scriptcenter/resources/qanda/dec04/hey1215.mspx

Por todo ello la solución que se me ha ocurrido es utilizar algún programa de portapapeles de terceros, a ser posible freeware. En un principio lo he buscado que permitiera trabajar desde línea de comandos, pero al no haberlo encontrado, he optado por SendKeys para manejar el programa de portapapeles, para ello ha sido necesario instalar el programa. El programa que he utilizado es ScreenGrab:

Free Software Utilities – No Nonsense Software
http://no-nonsense-software.com/freeware/

'Script para guardar en fichero JPG una captura de pantalla
'cada hora

'© Noviembre de 2006 - Fernando Reyes

'Exigimos la declaración de variables
Option Explicit

Dim obj_Shell 'Será un objeto wshShell

'Creamos el objeto wshShell
Set obj_Shell = CreateObject("WScript.Shell")

'Abrimos el programa de portapapeles
obj_Shell.Exec "C:Archivos de programaScreenGrabScreenGrab.exe"
'Pausa para asegurarnos de que está abierto
WScript.Sleep 1500

'Enviamos cuatro May+TAB para situarnos en el combo "Action"
'y una "c" para seleccionar que la acción sea copiar al
'portapapeles
obj_Shell.SendKeys "+{TAB}+{TAB}+{TAB}+{TAB}c"

'Abrimos ahora Internet Exploreer, en modo quiosco, con la URL
'de las estadísticas
obj_Shell.Run """c:Archivos de ProgramaInternet Exploreriexplore.exe"" -k http://www.servidor.com/admin/estadisticas"

'Establecemos ahora un bucle. No tiene condiciones, pues el scritp
'está pensado para que esté en ejecución contínua. Gracias a ser
'VBScript, esto no es un problema, basta abrir el administrador
'de tareas y matar el proceso "wscrip.exe" o "cscript.exe" (dependiendo
'de cuál hayamos utilizado para lanzar el script
Do

'si estamos en una hora en punto llamamos al procedimiento
'que realiza la captura de pantalla
If Right(FormatDateTime(Time,3),5) = "00:00" Then Call s_Captura

Loop
Sub s_Captura()
'Este procedimiento realiza una captura de pantalla y la guarda en disco
'Funciona asumiendo que está en ejecución el programa ScreenGrab, configurado
'para guardar en el portapapeles las capturas.

Dim obj_Shell 'Será un objeto wshShell

'Creamos el objeto wshShell
Set obj_Shell = CreateObject("WScript.Shell")

'ScreenCrab captura la pantalla con Alt+F12, generamos
'esta combinación de teclas con SendKey
obj_Shell.SendKeys "%{F12}"

'Abrimos Paint
obj_Shell.Run "mspaint"

'Esperamos a que esté completamente abierto Paint
Wscript.Sleep 1500

'Enviamos Alt+E, para que se despliege el menú "Edición"
'y a continuación "P" para que se ejcute "Pegar"
obj_Shell.SendKeys "%EP"

'Esperamos para asegurarnos de que se ha pegado la captura de
'pantalla en Paint
WScript.Sleep 1500

'Enviamos Ctrl+G a Paint, para que se abra el cuadro de diálogo
'de guardar
obj_Shell.SendKeys "^g"

'Esperamos a que esté abierto el cuádro de diálogo
Wscript.Sleep 1500

'Escribimos la ruta y nombre del fichero que guardaremos. El nombre
'está basado en la fecha (sustituyendo "/" por "-") y la hora
'(sustituyendo ":" por "~")
obj_Shell.SendKeys "c:RutaCarpeta" & _
Replace(FormatDateTime(Date,2),"/","-") & " " & _
Replace(FormatDateTime(Time,4),":","{~}")

'Esperamos para asegurarnos de que se escribe el nombre de fichero
Wscript.Sleep 1500

'Enviamos un tabulador y "j"; con el tabulador nos situamos en el
'desplegable de tipo de archivo y la "j" para que se seleccione JPG
obj_Shell.SendKeys "{TAB}j"

'Enviamos un ENTER para que se guarde el fichero
obj_Shell.SendKeys "~"

'Esperamos a que esté guardado el fichero
Wscript.Sleep 1500

'Cerramos Paint enviando Alt+F4
obj_Shell.SendKeys "%{F4}"

'Destruimos el objeto wshShell
Set obj_Shell = Nothing

End Sub

8 comentarios to “Script Para Guardar Capturas de Pantalla Cada Hora”

  1. WILLI said

    felicidades, muy creativo

  2. Black_rain said

    Antes que todo muchas felicitaciones por tu programa y tu creatividad. Ahora yo necesito algun conocimiento o guia o programa que vea lo que actualmente tengo en el portapapeles de windows. Si se pudiera en algun lenguaje que trabajara con el portapapeles de windows.

    Muchas gracias

    Guelmi

  3. rodolfo_gomez said

    bueno no hace falta usar un programa externo ni esperar nada de tiempo en pegar y guardar…

    aca dejo un code que hice, tenia la idea de la tecla pegar en ves de usar edicion pegar, y otras teclas tambien..

    wscript.sleep 2000
    set objshell = createobject("wscript.shell")
    Objshell.sendkeys "%{PRTSC}"
    objshell.run "mspaint"
    wscript.sleep 2000
    Objshell.appactivate "Dibujo - Paint",true
    objshell.SendKeys " "
    objShell.SendKeys "^g"
    objShell.SendKeys "C:\Documents and Settings\Facundo\Escritorio\captura.gif"
    objShell.SendKeys "{ENTER}"
    objshell.SendKeys "%{F4}"
    
  4. urpiano said

    Rodolfo,

    Dime qué hago mal, porque ese código ni me crea un fichero nuevo ni copia nada en Paint.

  5. Henry said

    Urpiano,

    El código que brindo Rodolfo es funcional, al menos en mi caso.
    Saludos.

  6. webmaster said

    tengo una pagina http://www.zignus.com que habla sobre recursos gratis en internet…alguien esta interesado en intercambio de links? si lo estan porfavor envien un correo a info@zignus.com, me gustaria linkear mi web con alguna de scripts gratis para paginas web

    Slds

  7. ddasdsad said

    El codigo que brindo Rodolfo y que Henry admite que funciona es falso, ya que la tecla PRINT SCREEN o {PRTSC} no funciona con ninguna aplicacion, solo para windows osea solo funciona cuando la persona presiona esa tecla y no con alguna aplicacion.

  8. ddasdsad said

    ASI LO INFORMA WINDOWS
    -> Note:
    You cannot send the PRINT SCREEN key {PRTSC} to an application.
    http://msdn.microsoft.com/en-us/library/8c6yea83(VS.85).aspx
    Asi que mejor busquen alguna forma de hacerlo ya que desde windows no se podra.
    Gracias y saludos
    XD

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s