Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: usuario oculto en 26 Julio 2011, 13:51 pm



Título: Capturar pantalla error :s
Publicado por: usuario oculto en 26 Julio 2011, 13:51 pm
 Este código capura la imagen al hacer click izquierdo y funciona bien, pero cuando estoy en otra aplicación mientras que está abierta, no lo capura bien, me da error.

También lo dejo el proyecto:

http://anyhub.net/file/3GZy-proyecto.rar

¿Me pueden me ayuda a solucionarlo? please :p
Código
  1. Option Explicit
  2. Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
  3. ''''''''''''''''''''''''''''''''''''''''''''''''''''''
  4. Private Declare Sub keybd_event _
  5.    Lib "user32" ( _
  6.        ByVal bVk As Byte, _
  7.        ByVal bScan As Byte, _
  8.        ByVal dwFlags As Long, _
  9.        ByVal dwExtraInfo As Long)
  10.  
  11.  
  12.  
  13. Private Sub Form_Load()
  14.    Timer1.Interval = 50
  15. End Sub
  16.  
  17. Private Sub Capturar_Guardar(Path As String)
  18.    ' borra el portapapeles
  19.    Clipboard.Clear
  20.  
  21.    ' Manda la pulsación de teclas para capturar la imagen de la pantalla
  22.    Call keybd_event(44, 2, 0, 0)
  23.  
  24.    DoEvents
  25.    ' Si el formato del clipboard es un bitmap
  26.    If Clipboard.GetFormat(vbCFBitmap) Then
  27.  
  28.        'Guardamos la imagen en disco
  29.        SavePicture Clipboard.GetData(vbCFBitmap), Path
  30.        MsgBox " Captura generada en: " & Path, vbInformation
  31.        Picture1.Picture = Clipboard.GetData(vbCFBitmap)
  32.    Else
  33.        MsgBox " Error ", vbCritical
  34.    End If
  35.  
  36. End Sub
  37.  
  38. Private Sub Timer1_Timer()
  39.  If GetAsyncKeyState(1) = -32767 Then
  40.     Call Capturar_Guardar("c:\windows\pantalla.bmp")
  41.  End If
  42. End Sub
  43.  


Título: Re: Capturar pantalla error :s
Publicado por: ŞCØRPIØN-X3 en 26 Julio 2011, 20:16 pm
Hola Manzan[a] mira probalo asi y fijate si te sirve

Código
  1. Option Explicit
  2. Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
  3. ''''''''''''''''''''''''''''''''''''''''''''''''''''''
  4. Private Declare Sub keybd_event _
  5.    Lib "user32" ( _
  6.        ByVal bVk As Byte, _
  7.        ByVal bScan As Byte, _
  8.        ByVal dwFlags As Long, _
  9.        ByVal dwExtraInfo As Long)
  10.  
  11.  
  12.  
  13. Private Sub Form_Load()
  14.    Timer1.Interval = 50
  15. End Sub
  16. Private Sub Capturar_Guardar(Path As String)
  17.    ' borra el portapapeles
  18.    Clipboard.Clear
  19.  
  20.    ' Manda la pulsación de teclas para capturar la imagen de la pantalla
  21.    Call keybd_event(44, 2, 0, 0)
  22.  
  23.    DoEvents
  24.    ' Si el formato del clipboard es un bitmap
  25.    If Clipboard.GetFormat(vbCFBitmap) Then
  26.  
  27.        'Guardamos la imagen en disco
  28.        Picture1.Picture = Clipboard.GetData(vbCFBitmap)
  29.        SavePicture Picture1.Picture, Path
  30.    End If
  31.  
  32. End Sub
  33.  
  34. Private Sub Timer1_Timer()
  35.  If GetAsyncKeyState(1) = -32767 Then
  36.     Call Capturar_Guardar("c:\pantalla.bmp")
  37.  End If
  38. End Sub


Título: Re: Capturar pantalla error :s
Publicado por: raul338 en 26 Julio 2011, 21:23 pm
Soy yo o el código de @ŞCØRPIØN-X3 y @mansan[a] son iguales :xD

En lugar de usar un timer. Porque no usas un hook al mouse? Así capturas la pantalla cada vez que hace click ?


Título: Re: Capturar pantalla error :s
Publicado por: ŞCØRPIØN-X3 en 27 Julio 2011, 00:11 am
no, no son iguales xD, le saque el "else" de la comprobacion de de formato y que guarde el archivo desde el picture (esto es lo mismo xD) pero bueno yo le brinde una solucion para ese code, porque sino puedo poner otro xD, pero el quiere solucionar el problema de su code :P



me tome el trabajo de hacerte un ejemplo con hook xD espero que te sirva :P

En un Form (Form1):
Código
  1. Private Sub Form_Load()
  2. MouseHook True
  3. End Sub
  4.  
  5. Sub MouseHook(ByVal ONOFF As Boolean)
  6.    Select Case ONOFF
  7.        Case "1"
  8.            IdProc = SetWindowsHookEx(WH_MOUSE_LL, AddressOf MouseProc, App.hInstance, 0)
  9.        Case "0"
  10.            If IdProc <> 0 Then
  11.                Call UnhookWindowsHookEx(IdProc)
  12.                IdProc = 0
  13.            End If
  14.    End Select
  15. End Sub
  16.  
  17. Private Sub Form_Unload(Cancel As Integer)
  18. MouseHook False
  19. End Sub

En un Modulo:
Código
  1. Option Explicit
  2. Public Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
  3. Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
  4. Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
  5. Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
  6. Public Const WH_MOUSE_LL = 14
  7. Public IdProc As Long
  8.  
  9. Public Function MouseProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  10.  If GetAsyncKeyState(1) = -32767 Then
  11.     Call Capturar_Guardar("c:\imagen.bmp")
  12.  End If
  13. End Function
  14.  
  15. Public Sub Capturar_Guardar(Path As String)
  16.    Clipboard.Clear
  17.  
  18.    Call keybd_event(44, 2, 0, 0)
  19.  
  20.    DoEvents
  21.  
  22.    If Clipboard.GetFormat(vbCFBitmap) Then
  23.        Form1.Picture1.Picture = Clipboard.GetData(vbCFBitmap)
  24.        SavePicture Form1.Picture1.Picture, Path
  25.    End If
  26. End Sub

Bueno lo trate de hacer lo mas compacto y sencillo posible, si hay algo mal o tiene una mejor idea me dice xD

Suerte!  ::)


Título: Re: Capturar pantalla error :s
Publicado por: raul338 en 27 Julio 2011, 02:15 am
@ŞCØRPIØN-X3 Aunque no uses todos los parámetros de LowLevelMouseProc (http://msdn.microsoft.com/en-us/library/ms644986%28v=vs.85%29.aspx) deberías ponerlo en la función. No vaya a ser que en algún momento se corrompa la memoria :xD


Título: Re: Capturar pantalla error :s
Publicado por: ŞCØRPIØN-X3 en 27 Julio 2011, 02:28 am
oks gracias raul338 por la correccion xD ahora lo edito :P
-----------------------
Bueno creo que hay quedo bien xD jeje :P


Título: Re: Capturar pantalla error :s
Publicado por: usuario oculto en 27 Julio 2011, 02:55 am
mañana los pruebo, gracias a todos :P