Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: DarkMatrix en 16 Noviembre 2008, 03:22 am



Título: Control de otras aplicaciones
Publicado por: DarkMatrix en 16 Noviembre 2008, 03:22 am
Hola a todos otra vez, esta vez traigo una duda, quisiera saber si hay alguna forma de detectar cuando otro programa ha pulsado un boton, o averiguar el caption de ese boton.

La cosa es que desarrolle un programa para llevar el control de un ciber, llevando los registros de horas y articulos comprados y vendidos y todo eso, pero quiero que la aplicacion me registre automaticamente un valor cuando se pulse un boton de la otra aplicacion; en este caso el boton que asigna una hora a una maquina cliente.

Ya he intentado hacerlo pero por ningun lado me da xD!, a ver si me pueden guiar.

no se si me entienden pero por hay va la cosa, cualquier cosa me dicen y les explico mejor.

Saludos xD!


Título: Re: Control de otras aplicaciones
Publicado por: LixKeÜ en 16 Noviembre 2008, 13:44 pm
 No se entiende muy bien pero... creo que si quieres saber datos acerca de un boton pulsado tenes que hookear la api de windows, elli si podras obtener esos datos.


Título: Re: Control de otras aplicaciones
Publicado por: Dessa en 16 Noviembre 2008, 16:05 pm
Otra opción a a la LixKeÜ es usar FindWindows, FinWindowsEx y "El todo poderoso" SendMessage . Fijate si podes adaptar este ejemplo a la aplicacion externa:

Código:

Option Explicit

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
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
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Const WM_SETTEXT = &HC

Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202

Private Const BM_GETSTATE = &HF2
Private Const WM_SETFOCUS = &H7
Private Const WM_KILLFOCUS = &H8
Private Const WM_ENABLE = &HA

Dim Hndl As Long
Dim chekeo As Long
Dim x As Long

Private Sub Form_Load()

Me.Caption = "Formulario"
Command1.Caption = "boton 1"
Command2.Caption = "quitar foco a boton 1"
Command3.Caption = "foco boton boton 1"

Timer1.Interval = 50

End Sub

Private Sub Command3_Click()

Command1.SetFocus

End Sub

Private Sub Timer1_Timer()

Hndl = FindWindow(vbNullString, "Formulario")
Hndl = FindWindowEx(Hndl, 0, vbNullString, "boton 1")

If Hndl <> 0 Then
 
    chekeo = SendMessage(Hndl, BM_GETSTATE, 0, 0)
   
    If chekeo = 0 Then Me.Cls: Me.Print "boton 1 sin foco"
    If chekeo = 8 Then Me.Cls: Me.Print "boton 1 con foco"
   
    If chekeo = 44 Or chekeo = 108 Then
      Me.Cls: Me.Print "boton 1 Click"
      x = Round(Timer): While Round(Timer) < x + 1: DoEvents: Wend
    End If

End If


End Sub



Saludos.