Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Xephiro en 19 Enero 2009, 07:17 am



Título: Enviar Instrucciones a una ventana
Publicado por: Xephiro en 19 Enero 2009, 07:17 am
Una pequeña pregunta xD es posible enviar instrucciones a una ventana, sin tener que tenerla visible?


Por ejemplo, que presione un boton X de la ventana MiPrograma, pero sin tener que visualizarla para que no me interfiera con lo que hago?


Título: Re: Enviar Instrucciones a una ventana
Publicado por: el_c0c0 en 19 Enero 2009, 07:47 am
Si, con el api sendmessage... buscas el hwnd del boton por ejemplo y le envias mousedown y mouseup y asi generas un click!

saludos


Título: Re: Enviar Instrucciones a una ventana
Publicado por: seba123neo en 19 Enero 2009, 08:03 am
pues si, como te dijeron, busca los mensajes correspondientes a los clicks y se los pasas...antes busca el hwnd con apis tambien..

saludos.


Título: Re: Enviar Instrucciones a una ventana
Publicado por: Xephiro en 19 Enero 2009, 14:38 pm
Gracias por la ayuda, pero ahora otra preguntita mas :D


Como es posible detectar los nombres de Botones, ComboBox, TextBox, ETC de las  aplicaciones que quiero manipular con sendmessage?


Título: Re: Enviar Instrucciones a una ventana
Publicado por: Dessa en 19 Enero 2009, 15:31 pm
'Estas 2 funciones obtienen el Caption de la ventana o control
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" ( _
    ByVal hwnd As Long, _
    ByVal lpString As String, _
    ByVal cch As Long) As Long

' Retorna la cantidad de caracteres del caption de la ventana

Private Declare Function GetWindowTextLength Lib "user32" _
Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long


Código:

Option Explicit

Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal Hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal Hwnd As Long) As Long

Private Sub Form_Load()
Me.Caption = "Nombre de ventanas o controles"
End Sub

Private Sub Command1_Click()
Dim nombre As String
nombre = String(GetWindowTextLength(Me.Hwnd), Chr$(0))
Call GetWindowText(Me.Hwnd, nombre, 100)
MsgBox nombre
End Sub


Saludos


Título: Re: Enviar Instrucciones a una ventana
Publicado por: Karcrack en 19 Enero 2009, 15:57 pm
Para obtener el tipo de control no se usa GetWindowText, sino GetClassName...

Ejemplo:
Código
  1. Public Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
  2.  
  3. Private Function GetWinClassName(ByVal hwnd As Long) As String
  4.    Dim lLength         As Long
  5.  
  6.    'Creamos el buffer
  7.    GetWinClassName = String$(260, Chr$(0))
  8.    'Llamamos al API
  9.    lLength = GetClassName(hwnd, GetWinClassName, Len(GetWinClassName))
  10.    'Recortamos el buffer
  11.    GetWinClassName = Left$(GetWinClassName, lLength)
  12. End Function
En caso de ser un TreeView el resultado es: SysTreeView32
Si es un ListView: SysListView32
Si es un boton: Button

Y otros muchos mas....

Saludos ;D


Título: Re: Enviar Instrucciones a una ventana
Publicado por: Dessa en 19 Enero 2009, 16:03 pm
Gracias por la ayuda, pero ahora otra preguntita mas :D


Como es posible detectar los nombres de Botones, ComboBox, TextBox, ETC de las  aplicaciones que quiero manipular con sendmessage?

Karcrack , quiere saber el nombre de los controles, no la clase

GetWindowText, no GetClassName


Título: Re: Enviar Instrucciones a una ventana
Publicado por: Dessa en 19 Enero 2009, 16:15 pm
Código:

Option Explicit

Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long

Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long

Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Private Type POINTAPI: x As Long: y As Long: End Type

Private Sub Form_Load(): Timer1.Interval = 100: End Sub

Private Sub Timer1_Timer()

Call SetWindowPos(Me.hwnd, -1, 0, 0, 0, 0, &H2 Or &H1)

Dim Cor As POINTAPI: Dim retorno As Long: retorno = GetCursorPos(Cor)
Dim Handle As Long: Handle = WindowFromPoint(Cor.x, Cor.y)

Dim nombre As String: nombre = String(GetWindowTextLength(Handle), Chr$(0))
Call GetWindowText(Handle, nombre, 100)

Dim ClassName As String: ClassName = Space(256)
Dim ret As Long: ret = GetClassName(Handle, ClassName, 256)
ClassName = Left$(ClassName, ret)


Me.Cls: Me.Print "Nombre control: " & nombre: Me.Print "Nombre Classe: " & ClassName


End Sub




Hacktor, solo pasá el puntero del mouse por donde quieras
 ;)


Título: Re: Enviar Instrucciones a una ventana
Publicado por: Xephiro en 19 Enero 2009, 16:21 pm
Una pregunta, pero tanto GetWindowText como GetClassName pueden tomar los datos de un programa como por ejemplo un juego o una aplicacion externa a mi programa?

lo que pasa es que quiero saber el nombre de Texbox y Botones de otra aplicacion para que con SendMessage pueda enviarle instrucciones


Título: Re: Enviar Instrucciones a una ventana
Publicado por: Dessa en 19 Enero 2009, 16:38 pm
Vamos por partes, primero FindWindows para obtener el Hwnd de la ventana, segundo FindWindowsEx para obtener el Hwnd del boton, caja de texto, etc, y tercero con este Hwnd y SendMessage mandas las intrucciones, si analisas el último codigo que te puse te puede facilitar la tarea.

Saludos



Título: Re: Enviar Instrucciones a una ventana
Publicado por: byway en 19 Enero 2009, 16:50 pm
Vamos por partes, primero FindWindows para obtener el Hwnd de la ventana, segundo FindWindowsEx para obtener el Hwnd del boton, caja de texto, etc, y tercero con este Hwnd y SendMessage mandas las intrucciones, si analisas el último codigo que te puse te puede facilitar la tarea.

Saludos



eso iva a escribir usar el findWindows para obtener la ventana a manipular,  :P :P


Título: Re: Enviar Instrucciones a una ventana
Publicado por: Xephiro en 21 Enero 2009, 00:09 am
Muchas Gracias la ayuda :D


Título: Re: Enviar Instrucciones a una ventana
Publicado por: Fabricio en 10 Febrero 2009, 13:54 pm
Hola a todos el tema me parecio muy interesante... podrian explicar un poco mas sobre las funciones  FindWindows para obtener el Hwnd de la ventana y FindWindowsEx  :huh:

gracias saludos


Título: Re: Enviar Instrucciones a una ventana
Publicado por: seba123neo en 10 Febrero 2009, 14:51 pm
Hola a todos el tema me parecio muy interesante... podrian explicar un poco mas sobre las funciones  FindWindows para obtener el Hwnd de la ventana y FindWindowsEx  :huh:

gracias saludos

chequea este post que habia respondido..

Ayuda con el parametro de esta API? (http://foro.elhacker.net/programacion_vb/ayuda_con_el_parametro_de_esta_api-t208847.0.html;msg992360#msg992360)

saludos.



Título: Re: Enviar Instrucciones a una ventana
Publicado por: Fabricio en 11 Febrero 2009, 13:17 pm
Hola a todos les cuento lo que qiero hacer para que puedas ayudarme... necesito formatear un pen drive con VB 6 sin interaccion del usuario tengo una idea de las apis que hay que usar pero como no se mucho de programacion se me complica

se me ocurrio manejar la ventana de windows Dar fomato pero no se como hacer para manejarla en forma oculta y apretar el boton iniciar poor codigo tambien voy a tener que apretar el boton aceptar cuando me pida confirmacion de que se van a borrar los datos  :huh:

pyeden ayudarme

muchas gracias su tu tiempo
saludos


Título: Re: Enviar Instrucciones a una ventana
Publicado por: Karcrack en 11 Febrero 2009, 14:29 pm
Hola a todos les cuento lo que qiero hacer para que puedas ayudarme... necesito formatear un pen drive con VB 6 sin interaccion del usuario tengo una idea de las apis que hay que usar pero como no se mucho de programacion se me complica

se me ocurrio manejar la ventana de windows Dar fomato pero no se como hacer para manejarla en forma oculta y apretar el boton iniciar poor codigo tambien voy a tener que apretar el boton aceptar cuando me pida confirmacion de que se van a borrar los datos  :huh:

pyeden ayudarme

muchas gracias su tu tiempo
saludos
Eso es lo que hace el code que puse en tu post :¬¬
Haz el favor de hacer las preguntas en su lugar correspondiente...

Saludos ;D


Título: Re: Enviar Instrucciones a una ventana
Publicado por: jorkaes en 29 Marzo 2009, 01:15 am
amigo hacktor, tengo una pregunta, como lograstes hacerlo, no he podido enviar intrucciones de pulsacion de tecla, solo logro de pulsaciones del mouse, como puedo enviar la pulsacion por ejemplo del insert, con el sendmessage, para enviar la a hago esto:

Private Const WM_KEYDOWN = &H100
Private Const WM_KEYUP = &H101

Call SendMessage(ret, WM_KEYDOWN, 65, 0)
Call SendMessage(ret, WM_KEYUP, 65, 0)

y nada, no digan que mi ret esta malo por que eso no es. ayudame pls.