elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  ¿Codigo VB? - Programar capturas de pantalla cada 10 minutos.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Codigo VB? - Programar capturas de pantalla cada 10 minutos.  (Leído 5,437 veces)
Paniic

Desconectado Desconectado

Mensajes: 32


\x90\x90\x90


Ver Perfil WWW
¿Codigo VB? - Programar capturas de pantalla cada 10 minutos.
« en: 18 Abril 2013, 22:14 pm »

Os comento mi problema.

Actualmente estoy trabajando en monitorización de Telefónica afortunadamente y allí se trabaja diariamente con Macros y programas en VB y aunque estoy empezando con este lenguaje tan sencillo necesito un programa para mi trabajo diario.

Parte de nuestro trabajo se centra en observar cada poco tiempo el estado de los centros de Movistar. Para ello tenemos aplicaciones propietario que muestran en tiempo real el estado de cada centro.

Actualmente uso una plantilla bastante extensa de excel para realizar los seguimientos de estos centros y el programa que os voy a proponer me salvaría diariamente.


Necesito un programa (en VB) que realice una captura de pantalla cada 10 minutos de una ventana en concreto, que estará abierta todo el día, y lo guarde como un archivo .JPG en la ruta que yo le indique. No estaría de más indicar el área de pantalla que quiero capturar (con la orden "Call CaptureRectangle").

La captura necesitaría que fuera cada 10 minutos de 8:00 a 16:00 que es mi jornada de trabajo.

¿Alguien podría, muy amablemente, cederme dicho código?

Como dije, estoy en el aprendizaje de VB así que con el código me valdría y luego ya me las apañaría para buscar cada orden y configurarlas. El problema está en que este proyecto termina en 2 meses y no vendría nada mal algo de ayuda para ganar mucho tiempo.

Gracias por la atención al mensaje. Saludos.


En línea

\x31\xc9\x83\xe9\xee\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\x5e\x10\xdb\x16\x83\xeb\xfc\xe2\xf4\x6f\xcb\x88\x55\x0d\x7a\xd9\x7c\x38\x48\x52\xf7\x93\x90\x48\x4f\xee\x2f\x16\x96\x17\x69\x22\x4d\x04\x78\xd1\x16\x5e\x89\xbd\x7e\x79\x1f\x98\x70\x0d\x99\x3a\xa6\x38\x40\x8a\x45\xd7\xf1\x98\xdb\xde\x42\xb3\x39\x71\x63\xb3\x7e\x71\x72\xb2\x78\xd7\xf3\x89\x45\xd7\xf1\x6b\x1d\x93\x90\xdb\x16
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: ¿Codigo VB? - Programar capturas de pantalla cada 10 minutos.
« Respuesta #1 en: 18 Abril 2013, 22:26 pm »

http://ambarhalim.blogspot.com/2013/03/source-code-auto-capture-screen-in.html
http://www.visualbasic.happycodings.com/code_snippets/code96.html


En línea

Paniic

Desconectado Desconectado

Mensajes: 32


\x90\x90\x90


Ver Perfil WWW
Re: ¿Codigo VB? - Programar capturas de pantalla cada 10 minutos.
« Respuesta #2 en: 19 Abril 2013, 00:16 am »


Estupenda información x64Core, breve y justo lo que necesitaba.
Ahora necesito solo un detalle mas.

¿Como puedo marca la ventana o pestaña que se va a capturar aunque esté minimizada o de fondo? ¿Es posible?
En línea

\x31\xc9\x83\xe9\xee\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\x5e\x10\xdb\x16\x83\xeb\xfc\xe2\xf4\x6f\xcb\x88\x55\x0d\x7a\xd9\x7c\x38\x48\x52\xf7\x93\x90\x48\x4f\xee\x2f\x16\x96\x17\x69\x22\x4d\x04\x78\xd1\x16\x5e\x89\xbd\x7e\x79\x1f\x98\x70\x0d\x99\x3a\xa6\x38\x40\x8a\x45\xd7\xf1\x98\xdb\xde\x42\xb3\x39\x71\x63\xb3\x7e\x71\x72\xb2\x78\xd7\xf3\x89\x45\xd7\xf1\x6b\x1d\x93\x90\xdb\x16
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: ¿Codigo VB? - Programar capturas de pantalla cada 10 minutos.
« Respuesta #3 en: 19 Abril 2013, 04:44 am »

Es mejer hacerlo con GDI...
cuando este minimizada o de fondo también es posible... en este foro esta dicha API...

aun así te dejo varios métodos para tomar una foto a la pantalla... es mejor GDI ya que así delimitas a que le quieres tomar la "Foto".
http://www.codeproject.com/Articles/5051/Various-methods-for-capturing-the-screen

Dulces Lunas!¡.
En línea

The Dark Shadow is my passion.
Paniic

Desconectado Desconectado

Mensajes: 32


\x90\x90\x90


Ver Perfil WWW
Re: ¿Codigo VB? - Programar capturas de pantalla cada 10 minutos.
« Respuesta #4 en: 19 Abril 2013, 21:55 pm »

Es mejer hacerlo con GDI...
cuando este minimizada o de fondo también es posible... en este foro esta dicha API...

aun así te dejo varios métodos para tomar una foto a la pantalla... es mejor GDI ya que así delimitas a que le quieres tomar la "Foto".
http://www.codeproject.com/Articles/5051/Various-methods-for-capturing-the-screen

Dulces Lunas!¡.

Le eché un ojo pero no encuentro como capturar estando una ventana minimizada. Es lo que realmente me está costando averiguar. Pero gracias por el enlace, para obtener muchos puntos de vista. ¿Sabrias alguna ayuda que pudiera servirme para saber por donde buscar las capturas minimizadas?
En línea

\x31\xc9\x83\xe9\xee\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\x5e\x10\xdb\x16\x83\xeb\xfc\xe2\xf4\x6f\xcb\x88\x55\x0d\x7a\xd9\x7c\x38\x48\x52\xf7\x93\x90\x48\x4f\xee\x2f\x16\x96\x17\x69\x22\x4d\x04\x78\xd1\x16\x5e\x89\xbd\x7e\x79\x1f\x98\x70\x0d\x99\x3a\xa6\x38\x40\x8a\x45\xd7\xf1\x98\xdb\xde\x42\xb3\x39\x71\x63\xb3\x7e\x71\x72\xb2\x78\xd7\xf3\x89\x45\xd7\xf1\x6b\x1d\x93\x90\xdb\x16
MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.518


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: ¿Codigo VB? - Programar capturas de pantalla cada 10 minutos.
« Respuesta #5 en: 20 Abril 2013, 00:18 am »

Le eché un ojo pero no encuentro como capturar estando una ventana minimizada.

Con todos lo puedes hacer. El que te recomendaron es el primero: Capture it the GDI way.
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: ¿Codigo VB? - Programar capturas de pantalla cada 10 minutos.
« Respuesta #6 en: 23 Abril 2013, 10:03 am »

Estupenda información x64Core, breve y justo lo que necesitaba.
Ahora necesito solo un detalle mas.

¿Como puedo marca la ventana o pestaña que se va a capturar aunque esté minimizada o de fondo? ¿Es posible?

Restaurar la ventana? función ShowWindow.
En línea

LeandroA
Moderador
***
Desconectado Desconectado

Mensajes: 760


www.leandroascierto.com


Ver Perfil WWW
Re: ¿Codigo VB? - Programar capturas de pantalla cada 10 minutos.
« Respuesta #7 en: 24 Abril 2013, 05:53 am »

Hola, para aportar un poco, como te decian antes utilizando GDI, solo que no usaria BitBlt, o StretchBlt  ya que estas no funcionarían si la ventana no esta visible osea detrás de otra, si esta minimizada no hay solución, si o si tienes que restaurarla como ya dijo x64Core (ShowWindow), entonces volviendo a la api para capturar la ventana te recomiendo  PrintWindow

Código:
Private Declare Function PrintWindow Lib "user32.dll" (ByVal hWnd As Long, ByVal hdcBlt As Long, ByVal nFlags As Long) As Long

para poder utilizarla tienes que tener el hwnd de la ventana lo puedes hacer con FindWindow (simpre y cuando esa ventana tenga un caption fijo)
el segundo parametro de la api es el hdc donde quieres dibujarlo por ejemplo, si la quieres hacer facil utiliza un picturebox. y el tercer parametro con 0 esta bien.

-----
Me tome un tiempo y te prepare algo que va a ser mejor que explicártelo.

en un formulario pone este código y un command1 (osea un boton)

Código
  1. Option Explicit
  2. Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  3. Private Declare Function GetWindowRect Lib "user32.dll" (ByVal hWnd As Long, ByRef lpRect As RECT) As Long
  4. Private Declare Function CreateCompatibleDC Lib "gdi32.dll" (ByVal hdc As Long) As Long
  5. Private Declare Function SelectObject Lib "gdi32.dll" (ByVal hdc As Long, ByVal hObject As Long) As Long
  6. Private Declare Function ReleaseDC Lib "user32.dll" (ByVal hWnd As Long, ByVal hdc As Long) As Long
  7. Private Declare Function DeleteObject Lib "gdi32.dll" (ByVal hObject As Long) As Long
  8. Private Declare Function IsIconic Lib "user32.dll" (ByVal hWnd As Long) As Long
  9. Private Declare Function ShowWindow Lib "user32.dll" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
  10. Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
  11. Private Declare Function UpdateWindow Lib "user32.dll" (ByVal hWnd As Long) As Long
  12. Private Declare Function GetDC Lib "user32.dll" (ByVal hWnd As Long) As Long
  13. Private Declare Function CreateCompatibleBitmap Lib "gdi32.dll" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
  14. Private Declare Function PrintWindow Lib "user32.dll" (ByVal hWnd As Long, ByVal hdcBlt As Long, ByVal nFlags As Long) As Long
  15. Private Declare Function DeleteDC Lib "gdi32.dll" (ByVal hdc As Long) As Long
  16.  
  17. Private Const WM_SYSCOMMAND As Long = &H112
  18. Private Const SC_RESTORE As Long = &HF120&
  19.  
  20. Private Type RECT
  21.    Left As Long
  22.    Top As Long
  23.    Right As Long
  24.    Bottom As Long
  25. End Type
  26.  
  27. Private Type GDIPlusStartupInput
  28.    GdiPlusVersion           As Long
  29.    DebugEventCallback       As Long
  30.    SuppressBackgroundThread As Long
  31.    SuppressExternalCodecs   As Long
  32. End Type
  33.  
  34. Private Type GUID
  35.    Data1           As Long
  36.    Data2           As Integer
  37.    Data3           As Integer
  38.    Data4(0 To 7)   As Byte
  39. End Type
  40.  
  41. Private Type EncoderParameter
  42.    GUID            As GUID
  43.    NumberOfValues  As Long
  44.    Type            As Long
  45.    Value           As Long
  46. End Type
  47.  
  48. Private Type EncoderParameters
  49.    Count           As Long
  50.    Parameter(15)   As EncoderParameter
  51. End Type
  52.  
  53. Private Const ImageCodecJPG = "{557CF401-1A04-11D3-9A73-0000F81EF32E}"
  54. Private Const EncoderQuality = "{1D5BE4B5-FA4A-452D-9CDD-5DB35105E7EB}"
  55. Private Declare Function GdiplusStartup Lib "gdiplus" (Token As Long, inputbuf As GDIPlusStartupInput, Optional ByVal outputbuf As Long = 0) As Long
  56. Private Declare Sub GdiplusShutdown Lib "gdiplus" (ByVal Token As Long)
  57. Private Declare Function GdipCreateBitmapFromHBITMAP Lib "GdiPlus.dll" (ByVal mHbm As Long, ByVal mhPal As Long, ByRef mBitmap As Long) As Long
  58. Private Declare Function GdipSaveImageToFile Lib "gdiplus" (ByVal image As Long, ByVal FileName As Long, ByRef clsidEncoder As GUID, ByRef encoderParams As Any) As Long
  59. Private Declare Function GdipDisposeImage Lib "gdiplus" (ByVal image As Long) As Long
  60. Private Declare Function CLSIDFromString Lib "ole32" (ByVal str As Long, Id As GUID) As Long
  61.  
  62.  
  63. Private Sub Form_Load()
  64.    Shell "calc.exe" 'esto es solo un ejemplo
  65. End Sub
  66.  
  67. Private Sub Command1_Click()
  68.    Dim hWnd As Long
  69.    Dim DestPath As String
  70.  
  71.    DestPath = "C:\Captura1.jpg" 'Destino donde se guardara la imagen
  72.    hWnd = FindWindow(vbNullString, "Calculadora") ' handle de la ventana mediante su caption.
  73.  
  74.    If (hWnd <> 0) And (LenB(DestPath) > 0) Then
  75.        If CaptureWindow(hWnd, DestPath) Then ' funcion para capturar y guardar la ventana como una imagen.jpg
  76.            Me.Picture = LoadPicture(DestPath) ' leemos la image para mostrar el resultado.
  77.        End If
  78.    End If
  79. End Sub
  80.  
  81. Private Function CaptureWindow(hWnd As Long, ByVal DestPath As String) As Boolean
  82.  
  83.    Dim tRECT As RECT
  84.    Dim lWidth As Long, lHeight As Long
  85.    Dim DC              As Long
  86.    Dim hDCMemory       As Long
  87.    Dim hBmp            As Long
  88.    Dim OldhBmp         As Long
  89.  
  90.    'Si la ventana esta minimizada la restaura
  91.    If IsIconic(hWnd) Then
  92.        SendMessage hWnd, WM_SYSCOMMAND, SC_RESTORE, ByVal 0&
  93.        DoEvents
  94.    End If
  95.  
  96.    'le peta una refrescada
  97.    UpdateWindow hWnd
  98.  
  99.    'obtiene las medidas
  100.    GetWindowRect hWnd, tRECT
  101.  
  102.    lWidth = tRECT.Right - tRECT.Left
  103.    lHeight = tRECT.Bottom - tRECT.Top
  104.  
  105.    'creamos un bitmap y un hdc
  106.    DC = GetDC(hWnd)
  107.    hDCMemory = CreateCompatibleDC(0)
  108.    hBmp = CreateCompatibleBitmap(DC, lWidth, lHeight)
  109.    SelectObject hDCMemory, hBmp
  110.    ReleaseDC hWnd, hdc
  111.  
  112.    'imprimimos la ventana en el hdc
  113.    PrintWindow hWnd, hDCMemory, 0
  114.  
  115.  
  116.  
  117.    '---------- Rutina para guardar el bmp como un jpg mediante GDI Plus
  118.    Dim gToken As Long
  119.    Dim gdiSI As GDIPlusStartupInput
  120.    Dim hImage As Long
  121.    Dim tEncoder  As GUID
  122.    Dim tParams     As EncoderParameters
  123.    Dim JPG_Quality As Long
  124.  
  125.    JPG_Quality = 80
  126.  
  127.    gdiSI.GdiPlusVersion = &H1
  128.    GdiplusStartup gToken, gdiSI
  129.  
  130.  
  131.    If gToken Then
  132.        If GdipCreateBitmapFromHBITMAP(hBmp, 0&, hImage) = 0 Then
  133.            CLSIDFromString StrPtr(ImageCodecJPG), tEncoder
  134.            With tParams
  135.                .Count = 1
  136.                .Parameter(0).NumberOfValues = 1&
  137.                .Parameter(0).Type = 4&
  138.                .Parameter(0).Value = VarPtr(JPG_Quality)
  139.                CLSIDFromString StrPtr(EncoderQuality), .Parameter(0).GUID
  140.            End With
  141.            If GdipSaveImageToFile(hImage, StrPtr(DestPath), tEncoder, ByVal tParams) = 0 Then
  142.                CaptureWindow = True
  143.            End If
  144.            GdipDisposeImage hImage
  145.        End If
  146.        GdiplusShutdown gToken
  147.    End If
  148. '-----------
  149.  
  150.    'Liberamos los objetos GDI
  151.    DeleteObject SelectObject(hDCMemory, OldhBmp)
  152.    DeleteDC hDCMemory
  153.  
  154.  
  155. End Function
  156.  

« Última modificación: 24 Abril 2013, 05:55 am por LeandroA » En línea

Paniic

Desconectado Desconectado

Mensajes: 32


\x90\x90\x90


Ver Perfil WWW
Re: ¿Codigo VB? - Programar capturas de pantalla cada 10 minutos.
« Respuesta #8 en: 26 Abril 2013, 18:25 pm »

Hola, para aportar un poco, como te decian antes utilizando GDI, solo que no usaria BitBlt, o StretchBlt  ya que estas no funcionarían si la ventana no esta visible osea detrás de otra, si esta minimizada no hay solución, si o si tienes que restaurarla como ya dijo x64Core (ShowWindow), entonces volviendo a la api para capturar la ventana te recomiendo  PrintWindow

Código:
Private Declare Function PrintWindow Lib "user32.dll" (ByVal hWnd As Long, ByVal hdcBlt As Long, ByVal nFlags As Long) As Long

para poder utilizarla tienes que tener el hwnd de la ventana lo puedes hacer con FindWindow (simpre y cuando esa ventana tenga un caption fijo)
el segundo parametro de la api es el hdc donde quieres dibujarlo por ejemplo, si la quieres hacer facil utiliza un picturebox. y el tercer parametro con 0 esta bien.

-----
Me tome un tiempo y te prepare algo que va a ser mejor que explicártelo.

en un formulario pone este código y un command1 (osea un boton)


WOW amigo, eso no es ayuda, eso es resolver la X.

Muchas gracias Leandro. Estuve estos dias mirando lo de las GDI, por otro camino, con scripts y usando el link.open y link.close. y quizas estaba perdiendo el tiempo pues no obtenia resultados.

Probare mañana por la mañana el codigo y lo configuraré tal como lo necesito pero por lo poco que veo ahora está resuelto, solo necesita funcionar, hacerlo correr y ya. Es una pena que en oculto no pero aun así puedo usar esta solución ya de forma definitiva.

Insisto, gracias Leandro.
En línea

\x31\xc9\x83\xe9\xee\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\x5e\x10\xdb\x16\x83\xeb\xfc\xe2\xf4\x6f\xcb\x88\x55\x0d\x7a\xd9\x7c\x38\x48\x52\xf7\x93\x90\x48\x4f\xee\x2f\x16\x96\x17\x69\x22\x4d\x04\x78\xd1\x16\x5e\x89\xbd\x7e\x79\x1f\x98\x70\x0d\x99\x3a\xa6\x38\x40\x8a\x45\xd7\xf1\x98\xdb\xde\x42\xb3\x39\x71\x63\xb3\x7e\x71\x72\xb2\x78\xd7\xf3\x89\x45\xd7\xf1\x6b\x1d\x93\x90\xdb\x16
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Capturas de pantalla
.NET (C#, VB.NET, ASP)
David Vans 3 3,593 Último mensaje 26 Agosto 2007, 14:18 pm
por shargon
Problema con capturas de pantalla « 1 2 »
Programación Visual Basic
newbie007 12 5,287 Último mensaje 27 Octubre 2011, 21:13 pm
por newbie007
Ejecutar archivo cada x minutos
Scripting
BALTA00 1 3,727 Último mensaje 7 Diciembre 2011, 19:57 pm
por madpitbull_99
Pantalla se apaga a los minutos de estar encendida...
Hardware
WIитX 7 3,345 Último mensaje 29 Septiembre 2015, 13:40 pm
por WIитX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines