Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: K1ll1ng M4ch1n3 en 29 Julio 2009, 17:08 pm



Título: Leer el valor de los campos de otro programa
Publicado por: K1ll1ng M4ch1n3 en 29 Julio 2009, 17:08 pm
Lo que quiero hacer es un programa que lea los valores escritos en otro programa y cree un archivo con ese contenido. Conozco el nombre de los campos del otro programa, que estan contenidos en un archivo de recursos (.res).

Alguien podria darme una idea de cómo "conectar" con el otro programa y como comprobar su valor?
No necesito el codigo hecho, simplemente quiero un poco de orientacion.

PD: Uso Visual Basic 6.0 y .NET


Título: Re: Leer el valor de los campos de otro programa
Publicado por: Lewert en 29 Julio 2009, 19:02 pm
Lee la memoria de dicho proceso con ReadProcessMemory. Si desas cambiar el valor puedes hacerlo con WriteProcessMemory ;)


Título: Re: Leer el valor de los campos de otro programa
Publicado por: K1ll1ng M4ch1n3 en 29 Julio 2009, 22:36 pm
Habria alguna forma mas simple de hacerlo? Lo de leer la memoria se me hace un poco complicado...
Aunque sea alguna cosa un poco cutre, lo unico que necesito es que funcione para leer el valor de un campo de texto y copiar ese valor.

Saludos y gracias


Título: Re: Leer el valor de los campos de otro programa
Publicado por: Dessa en 29 Julio 2009, 23:24 pm
SendMessage con sETTEXT para enviar y SendMessage con GETTEXT para recibir.

http://foro.elhacker.net/programacion_vb/pasar_variables_por_memoria_src-t244803.0.html (http://foro.elhacker.net/programacion_vb/pasar_variables_por_memoria_src-t244803.0.html)

S2


Título: Re: Leer el valor de los campos de otro programa
Publicado por: K1ll1ng M4ch1n3 en 31 Julio 2009, 11:19 am
Gracias ese tiene mejor pinta para lo que necesito.  Luego lo pruebo y ya os comentare si tengo alguna duda


Título: Re: Leer el valor de los campos de otro programa
Publicado por: Dessa en 1 Agosto 2009, 12:50 pm
Dejo un ejemplo simple del uso de SendMessage + WM_GETTEXT para el que le sirva.

Nota: no hace falta usar un timer es solo para facilitar el concepto

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.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal Msg As Long, wParam As Any, lParam As Any) As Long
Private Const WM_GETTEXT = &HD: Private Const WM_SETTEXT = &HC

Private Sub Form_Load()
  Timer1.Interval = 16
  Me.AutoRedraw = True
  Shell "calc"
End Sub

Private Sub Timer1_Timer()
  Dim Hwndl As Long
  Hwndl = FindWindow("SciCalc", vbNullString)
  Hwndl = FindWindowEx(Hwndl, 0, "Edit", vbNullString)

  Dim recibir As String: recibir = Space$(34)
  Call SendMessage(Hwndl, WM_GETTEXT, ByVal 34, ByVal recibir)

  Me.Cls
  'Me.Print recibir
  Me.Print Replace(recibir, vbNullChar, "")
End Sub


S2