Espero alguien me pueda ayudar
Lo que necesito saber si hay forma de identificar la secuencia de campos (text) de un porgrama exe echo en vb 6.0
Mi .exe tiene 4 text y el otro tambien cuando escribo en los 4 si le envia los datos pero en desorden es decir text1 (exe1) le escribe al text2(exe2)
Existe un API o algo para q los valores sean:
Text1 (exe1) a Text1 (exe2)
Text2 (exe1) a Text2 (exe2)
Text3 (exe1) a Text3 (exe2)
ya tengo su hwnd de cada objeto
Saludos y Muchas Gracias.
Mira si esto te ayuda
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)
Deja checo,
Saludos y Gracias
hummm algo mas facil que se me ocurre es mandar el text asi
|Text1|VALOR DEL TEXT1
etc..
y asi cambias
y al recibirlo haces un SPLIT con |
para saber a que Text va y el valor
pone el codigo, no podemos saber lo que estas haciendo mal...
te envio el codigo seba123neo saludos y gracias :silbar:
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
Const BM_CLICK = 245 'Envía un clik al botón
Const WM_SETFOCUS As Long = 7 'Coloca el foco sobre una ventana
Private Sub Command1_Click()
Dim recibir As String
Dim Hwndl As Long
Dim LsTexto1 As Long
Dim LsTexto2 As Long
Dim LsTexto3 As Long
Dim LsFoco As Long
Dim LsFoco1 As Long
Dim LsCommand As Long
Dim LsCommand1 As Long
Hwndl = FindWindow(vbNullString, "Alberto Olvera")
LsTexto1 = FindWindowEx(Hwndl, 0, "ThunderRT6TextBox", vbNullString)
LsTexto2 = FindWindowEx(Hwndl, LsTexto1, "ThunderRT6TextBox", vbNullString)
LsTexto3 = FindWindowEx(Hwndl, LsTexto2, "ThunderRT6TextBox", vbNullString)
LsCommand = FindWindowEx(Hwndl, 0, "ThunderRT6CommandButton",vbNullString)
Call SendMessage(LsTexto1, WM_SETTEXT, Len(Text1.Text), ByVal Text1.Text)
Call SendMessage(LsTexto2, WM_SETTEXT, Len(Text2.Text), ByVal Text2.Text)
Call SendMessage(LsTexto3, WM_SETTEXT, Len(Text3.Text), ByVal Text3.Text)
LsFoco = SendMessage(LsTexto1, WM_SETFOCUS, 0, vbNullString)
LsFoco1 = SendMessage(LsCommand, BM_CLICK, 1, vbNullString)
End Sub
Hwndl = FindWindow(vbNullString, "Alberto Olvera")
LsTexto1 = FindWindowEx(Hwndl, 0, vbNullString, "Text1") ' Text1 es el nombre del control en el exe2
LsTexto2 = FindWindowEx(Hwndl, 0, vbNullString, "Text2") ' Text2 es el nombre del control en el exe2
LsTexto3 = FindWindowEx(Hwndl, 0, vbNullString, "Text3") ' Text3 es el nombre del control en el exe2
Call SendMessage(LsTexto1, WM_SETTEXT, 0, ByVal Text1.Text) ' no hace falta bufer para enviar
Call SendMessage(LsTexto2, WM_SETTEXT, 0, ByVal Text2.Text) ' no hace falta bufer para enviar
Call SendMessage(LsTexto3, WM_SETTEXT, 0, ByVal Text3.Text) ' no hace falta bufer para enviar
Disculpa Dessa pero entonces como le envio los datos del text1 (exe1) al text1(exe2)
???????????
Perdon, es el contenido String de los text del exe2 el que debes usar
El bufer es no hace falta
Dim Hwndl As Long
Dim LsTexto1 As Long
Dim LsTexto2 As Long
Dim LsTexto3 As Long
Hwndl = FindWindow(vbNullString, "Alberto Olvera")
LsTexto1 = FindWindowEx(Hwndl, 0, vbNullString, "Text1") ' contenido strng de Text1 en el exe2
LsTexto2 = FindWindowEx(Hwndl, 0, vbNullString, "Text2") ' contenido strng de Text2 en el exe2
LsTexto3 = FindWindowEx(Hwndl, 0, vbNullString, "Text3") ' contenido strng de Text3 en el exe2
Call SendMessage(LsTexto1, WM_SETTEXT, 0, ByVal Text1.Text) ' no hace falta bufer para enviar
Call SendMessage(LsTexto2, WM_SETTEXT, 0, ByVal Text2.Text) ' no hace falta bufer para enviar
Call SendMessage(LsTexto3, WM_SETTEXT, 0, ByVal Text3.Text) ' no hace falta bufer para enviar
PD: así me estan llegando los tres mensajes perfectamente
compila y ejecuta el Proyecto1
http://rs355.rapidshare.com/files/290951605/Enviar.zip (http://rs355.rapidshare.com/files/290951605/Enviar.zip)
Dessa gracias x el ejemplo y eso es lo q quiero pero veo q utilizas la api SetWindowPos, el exe al que le quiero mandar los textos no tiene programada esta api y no tengo los ejecutables como lo puedo lograr ???????
Saludos...
SetWindowPos no tiene nada que ver en el código, la usé en los dos exes solamente para que queden los dos Form en primer plano y los puedas ver mas facil .
PD: los mensajes al segundo ejecutable van a llegar igual, aun si esta minimizado u oculto ya que estan llegando por Handdle. (no por posicion)
realizando otra prueba dejando en blanco la opcin text en blanco no le anecuentra
text1 text1.tex = ""
Otra opcion,
Saludos y GRacias
No te entendí la pregunta o el errror
No me explique, aver si ahora si
Hwndl = FindWindow(vbNullString, "Alberto Olvera")
LsTexto1 = FindWindowEx(Hwndl, 0, vbNullString, "Text1") ' contenido string de Text1 en el exe2
En el objeto Text1 del exe2, si le asigno a la propiedad text nada(text1.text = "")no encuentra el Hwndl
a q se debe ????
espero ser claro
Cita de: olve en 11 Octubre 2009, 02:31 AM
No me explique, aver si ahora si
Hwndl = FindWindow(vbNullString, "Alberto Olvera")
LsTexto1 = FindWindowEx(Hwndl, 0, vbNullString, "Text1") ' contenido string de Text1 en el exe2
En el objeto Text1 del exe2, si le asigno a la propiedad text nada(text1.text = "")no encuentra el Hwndl
a q se debe ????
espero ser claro
no puede ser, yo lo pruebo, borro todo lo que hay en los textbox del exe2 y me manda los datos igual...
A ver, a mi igual que a Seba, los mensajes me llegan en todos los casos y no me tira ningun error.
Olve, si lo que queres (creo) es borrar el contenido de los 3 Text del segundo ejecutable cuando este se inicia:
Deja (en diseño del segundo ejecutable) la propiedad Text tal cual, "Text1" "Text2" y "Text3" (para que lleguen los mensajes), luego en en load (tambien del del segundo Ejecutable) agregas estas tres lineas:
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
Nota: en el primer ejecutable no cambias nada, los mensajes siguen siendo para "text1" "Text2" y "text3"
Era eso ???
El detalle q te comento es cuando en dieño (segundo ejecutable) dejo en blanco la propiedad text ya no llegan los nemsajes este es el detalle
como tu lo mancionas:
Deja (en diseño del segundo ejecutable) la propiedad Text tal cual, "Text1" "Text2" y "Text3" (para que lleguen los mensajes),
pero si yo dejo:
En (en diseño del segundo ejecutable) la propiedad Text "" "" y "" (asi ya NO llegan los mensajes)
porque ???
ejemplo 1) cambias la propiedad Text del Text1 (en diseño del segundo exe) por y
En este tambien tenes que cambiar el mensaje del primer exe:
LsTexto1 = FindWindowEx(Hwndl, 0, vbNullString, "y") ' contenido strng de Text1 en el exe2
ejemplo 2) cambias la propiedad Text del Text1 (en diseño del segundo exe) por "y"
En este otro tambien tenes que cambiar el mensaje del primer exe:
LsTexto1 = FindWindowEx(Hwndl, 0, vbNullString, """y""") ' contenido strng de Text1 en el exe2
Lo q pasa, es q le quiero mandar mensajes a un exe de vb 6.0 del cual no tengo codigo fuente y la unica opcion es atravez de otro (este q estoy tratando de hacer)
lo primero q tengo q hacer es tener el orden de los text, los cuales esta en blanco lo se por medio del SPY++ de Microsof es por eso el primer codigo q te envie
a la mejor lo estoy haciendo mal y existe otra forma de hacer ???
podras orientarme ??????
Gracias x el tiempo
Depende de como se programó el ejecutable, yo uso generalmente APISPY pero a veces llegar a un control es muy "enredado". Prueba con SPY++ y de acuerdo a los datos que obtengas vas sacando concluciones si podes llegar por nombre de clase , por nombre de contol, por ambos, por "order" en el formulario con GetWindow, etc , etc
Tambien seria bueno que busques ejemplos y aprendas a manejar EnumChildProc
PD: Prueba con SPY++ y saca concluciones, si es un Form simple debería ser facil entrarle (dije debería, te repito que a veces no lo es)
S2
EDIT: Si buscas en el foro hay un buen ejemplo de Seba con EnumChildProc