Autor
|
Tema: ¿Codigo VB? - Programar capturas de pantalla cada 10 minutos. (Leído 5,714 veces)
|
Paniic
Desconectado
Mensajes: 32
\x90\x90\x90
|
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
|
|
|
|
Paniic
Desconectado
Mensajes: 32
\x90\x90\x90
|
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
|
|
|
|
Paniic
Desconectado
Mensajes: 32
\x90\x90\x90
|
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
|
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
Mensajes: 1.908
|
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
|
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 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) Option Explicit Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function GetWindowRect Lib "user32.dll" (ByVal hWnd As Long, ByRef lpRect As RECT) As Long Private Declare Function CreateCompatibleDC Lib "gdi32.dll" (ByVal hdc As Long) As Long Private Declare Function SelectObject Lib "gdi32.dll" (ByVal hdc As Long, ByVal hObject As Long) As Long Private Declare Function ReleaseDC Lib "user32.dll" (ByVal hWnd As Long, ByVal hdc As Long) As Long Private Declare Function DeleteObject Lib "gdi32.dll" (ByVal hObject As Long) As Long Private Declare Function IsIconic Lib "user32.dll" (ByVal hWnd As Long) As Long Private Declare Function ShowWindow Lib "user32.dll" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long 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 Private Declare Function UpdateWindow Lib "user32.dll" (ByVal hWnd As Long) As Long Private Declare Function GetDC Lib "user32.dll" (ByVal hWnd As Long) As Long Private Declare Function CreateCompatibleBitmap Lib "gdi32.dll" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long Private Declare Function PrintWindow Lib "user32.dll" (ByVal hWnd As Long, ByVal hdcBlt As Long, ByVal nFlags As Long) As Long Private Declare Function DeleteDC Lib "gdi32.dll" (ByVal hdc As Long) As Long Private Const WM_SYSCOMMAND As Long = &H112 Private Const SC_RESTORE As Long = &HF120& Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Private Type GDIPlusStartupInput GdiPlusVersion As Long DebugEventCallback As Long SuppressBackgroundThread As Long SuppressExternalCodecs As Long End Type Private Type GUID Data1 As Long Data2 As Integer Data3 As Integer Data4(0 To 7) As Byte End Type Private Type EncoderParameter GUID As GUID NumberOfValues As Long Type As Long Value As Long End Type Private Type EncoderParameters Count As Long Parameter(15) As EncoderParameter End Type Private Const ImageCodecJPG = "{557CF401-1A04-11D3-9A73-0000F81EF32E}" Private Const EncoderQuality = "{1D5BE4B5-FA4A-452D-9CDD-5DB35105E7EB}" Private Declare Function GdiplusStartup Lib "gdiplus" (Token As Long, inputbuf As GDIPlusStartupInput, Optional ByVal outputbuf As Long = 0) As Long Private Declare Sub GdiplusShutdown Lib "gdiplus" (ByVal Token As Long) Private Declare Function GdipCreateBitmapFromHBITMAP Lib "GdiPlus.dll" (ByVal mHbm As Long, ByVal mhPal As Long, ByRef mBitmap As Long) As Long Private Declare Function GdipSaveImageToFile Lib "gdiplus" (ByVal image As Long, ByVal FileName As Long, ByRef clsidEncoder As GUID, ByRef encoderParams As Any) As Long Private Declare Function GdipDisposeImage Lib "gdiplus" (ByVal image As Long) As Long Private Declare Function CLSIDFromString Lib "ole32" (ByVal str As Long, Id As GUID) As Long Private Sub Form_Load() Shell "calc.exe" 'esto es solo un ejemplo End Sub Private Sub Command1_Click() Dim hWnd As Long Dim DestPath As String DestPath = "C:\Captura1.jpg" 'Destino donde se guardara la imagen hWnd = FindWindow(vbNullString, "Calculadora") ' handle de la ventana mediante su caption. If (hWnd <> 0) And (LenB(DestPath) > 0) Then If CaptureWindow(hWnd, DestPath) Then ' funcion para capturar y guardar la ventana como una imagen.jpg Me.Picture = LoadPicture(DestPath) ' leemos la image para mostrar el resultado. End If End If End Sub Private Function CaptureWindow(hWnd As Long, ByVal DestPath As String) As Boolean Dim tRECT As RECT Dim lWidth As Long, lHeight As Long Dim DC As Long Dim hDCMemory As Long Dim hBmp As Long Dim OldhBmp As Long 'Si la ventana esta minimizada la restaura If IsIconic(hWnd) Then SendMessage hWnd, WM_SYSCOMMAND, SC_RESTORE, ByVal 0& DoEvents End If 'le peta una refrescada UpdateWindow hWnd 'obtiene las medidas GetWindowRect hWnd, tRECT lWidth = tRECT.Right - tRECT.Left lHeight = tRECT.Bottom - tRECT.Top 'creamos un bitmap y un hdc DC = GetDC(hWnd) hDCMemory = CreateCompatibleDC(0) hBmp = CreateCompatibleBitmap(DC, lWidth, lHeight) SelectObject hDCMemory, hBmp ReleaseDC hWnd, hdc 'imprimimos la ventana en el hdc PrintWindow hWnd, hDCMemory, 0 '---------- Rutina para guardar el bmp como un jpg mediante GDI Plus Dim gToken As Long Dim gdiSI As GDIPlusStartupInput Dim hImage As Long Dim tEncoder As GUID Dim tParams As EncoderParameters Dim JPG_Quality As Long JPG_Quality = 80 gdiSI.GdiPlusVersion = &H1 GdiplusStartup gToken, gdiSI If gToken Then If GdipCreateBitmapFromHBITMAP(hBmp, 0&, hImage) = 0 Then CLSIDFromString StrPtr(ImageCodecJPG), tEncoder With tParams .Count = 1 .Parameter(0).NumberOfValues = 1& .Parameter(0).Type = 4& .Parameter(0).Value = VarPtr(JPG_Quality) CLSIDFromString StrPtr(EncoderQuality), .Parameter(0).GUID End With If GdipSaveImageToFile(hImage, StrPtr(DestPath), tEncoder, ByVal tParams) = 0 Then CaptureWindow = True End If GdipDisposeImage hImage End If GdiplusShutdown gToken End If '----------- 'Liberamos los objetos GDI DeleteObject SelectObject(hDCMemory, OldhBmp) DeleteDC hDCMemory End Function
|
|
« Última modificación: 24 Abril 2013, 05:55 am por LeandroA »
|
En línea
|
|
|
|
Paniic
Desconectado
Mensajes: 32
\x90\x90\x90
|
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 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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Capturas de pantalla
.NET (C#, VB.NET, ASP)
|
David Vans
|
3
|
3,806
|
26 Agosto 2007, 14:18 pm
por shargon
|
|
|
Problema con capturas de pantalla
« 1 2 »
Programación Visual Basic
|
newbie007
|
12
|
5,572
|
27 Octubre 2011, 21:13 pm
por newbie007
|
|
|
Ejecutar archivo cada x minutos
Scripting
|
BALTA00
|
1
|
3,872
|
7 Diciembre 2011, 19:57 pm
por madpitbull_99
|
|
|
Pantalla se apaga a los minutos de estar encendida...
Hardware
|
WIитX
|
7
|
3,565
|
29 Septiembre 2015, 13:40 pm
por WIитX
|
|
|
[AYUDA] CMD codigo minutos a segundos
Scripting
|
Cronno
|
2
|
928
|
23 Abril 2025, 01:02 am
por Cronno
|
|