Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: QBBD en 28 Enero 2013, 02:18 am



Título: Duda con la Api, Pulsar en boton de una aplicacion externa
Publicado por: QBBD en 28 Enero 2013, 02:18 am
Hola a todos, un Saludo de Mi parte, Bueno resulta que tengo una aplicacion externa  que contiene Checkbox y Command(quiero manejar el programa externo).

Tengo un codigo que si me funciona para marca y desmarcar los checkbok, pero para pulsar el comannd no me va.
aca el codigo que tengo...

Código:
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
    Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Integer, ByVal hWnd2 As Integer, ByVal lpsz1 As String, ByVal lpsz2 As String) As Integer
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As String) As Integer
    Private Const BM_CLICK = &HF5
       
Private Sub Command1_Click()
       Dim vPadre As Long
       Dim vHijo1 As Long
     
       vPadre = FindWindow("#32770", "Game Emulator V7.0") 'Ventana a ejecutar (Class = #32770)(Caption=Ejecutar)
       vHijo1 = FindWindowEx(vPadre, 0&, "Button", "Belly Panel") 'Boton (Class=Button)(Caption= Aceptar)
     
       Call SendMessage(vHijo1, BM_CLICK, 0, vbNullString)
End Sub

Private Sub Command2_Click()
       Dim vPadre As Long
       Dim vHijo1 As Long
     
       vPadre = FindWindow("#32770", "Game Emulator V7.0") 'Ventana a ejecutar (Class = #32770)(Caption=Ejecutar)
       vHijo1 = FindWindowEx(vPadre, 0&, "Button", "Audit") 'Boton (Class=Button)(Caption= Aceptar)
     
       Call SendMessage(vHijo1, BM_CLICK, 0, vbNullString)
End Sub

Private Sub Command3_Click()
'ESTE Command ES EL QUE SE SUPONE QUE DEBERIA PULSAR EL BOTON DE LA APLICACION EXTERNA
       Dim vPadre As Long
       Dim vHijo1 As Long
     
       vPadre = FindWindow("#32770", "Game Emulator V7.0") 'Ventana a ejecutar (Class = #32770)(Caption=Ejecutar)
       vHijo1 = FindWindowEx(vPadre, 0&, "Button", "Play 9") 'Boton (Class=Button)(Caption= Aceptar)
     
       Call SendMessage(vHijo1, BM_CLICK, 0, vbNullString)
End Sub


Título: Re: Duda con la Api, Pulsar en boton de una aplicacion externa
Publicado por: Psyke1 en 28 Enero 2013, 13:58 pm
Igual el botón no está en ese nivel. :rolleyes: Me explico:
FindWindowEx() te saca el hwnd de un objeto contenido en el primer nivel de Game Emulator V7.0.
Seguramente ese botón no se encuentre en exactamente ahí.
Yo creo que si sacas el hwnd del botón con el Spy++ haces un GetParent() no coincide con el hwnd de Game Emulator V7.0.
Posible solución: api EnumChildWindows().

¡Suerte! ;)

DoEvents! :P


Título: Re: Duda con la Api, Pulsar en boton de una aplicacion externa
Publicado por: Danyfirex en 28 Enero 2013, 16:15 pm
me hice esto rapidito debería funcionar bien.


Código
  1. Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
  2. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  3. Private Declare Function SendMessage_Long Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef LParam As Long) As Long
  4. Private Const WM_LBUTTONDOWN  As Long = &H201
  5. Private Const WM_LBUTTONUP    As Long = &H202
  6. Private Const WM_KEYUP        As Long = &H101
  7. Private Const WM_KEYDOWN      As Long = &H100
  8. Private Const VK_SPACE    As Long = &H20
  9.  
  10. Private Sub Command1_Click()
  11. Dim bwnd As Long
  12. Dim wwnd As Long
  13. wwnd = FindWindow(vbNullString, "Form1") ' titulo de tu ventana
  14. bwnd = FindWindowEx(wwnd, ByVal 0&, "ThunderRT6CommandButton", "Command1") 'nombre de la clase y nombre del boton
  15. WindowAPI_Click (bwnd)
  16. End Sub
  17. 'funcion click
  18. Public Sub WindowAPI_Click(ByVal hwnd As Long)
  19. Dim retVal As Long
  20. retVal = SendMessage_Long(hwnd, WM_LBUTTONDOWN, 0&, ByVal 0&)
  21. retVal = SendMessage_Long(hwnd, WM_LBUTTONDOWN, 0&, ByVal 0&)
  22. retVal = SendMessage_Long(hwnd, WM_KEYUP, VK_SPACE, ByVal 0&)
  23. retVal = SendMessage_Long(hwnd, WM_LBUTTONUP, 0&, ByVal 0&)
  24. End Sub
  25.  
  26.  

saludos