Autor
|
Tema: Sendkeys (Leído 4,285 veces)
|
ViCrack€r
Desconectado
Mensajes: 49
|
|
Sendkeys
« en: 19 Agosto 2005, 03:05 am » |
|
Hola, quiero hacer un programa que se comunica con otro: Programa 1 --- 1 Textbox para escribir un número 1 Boton para que me compare el número que he escrito con el numero válido 1 Testbox en el que sale Bien o Mal
Programa 2 --- 1 Boton para hacer estas operaciones Manda 1 numero con SendKeys n, True Manda SendKeys ("{tab}") para saltar al boton Manda SendKeys ("{ENTER}") para que compruebe si el número introducido es el válido. Si el número no es válido se vueve ha realizar la misma operación pero el valor del número a enviar es n=n+1
El problema está en que yo puedo ver si el número es correcto o no porque me lo dice el segundo Testbox del programa 1, pero el Programa 2 no se como hacer para que lea lo que pone en el segundo Textbox (que pone bien o mal).
¿Como puedo captar el valor del Textbox (programa 1) desde el programa 2?
Gracias y saludos.
|
|
|
En línea
|
|
|
|
ZEALOT
Desconectado
Mensajes: 38
|
El problema está en que yo puedo ver si el número es correcto o no porque me lo dice el segundo Testbox del programa 1, pero el Programa 2 no se como hacer para que lea lo que pone en el segundo Textbox (que pone bien o mal).
¿Como puedo captar el valor del Textbox (programa 1) desde el programa 2? este es mas o menos el codigo, para una explicacion mas detallada de esto ve a este thread donde explico un poco deestas apis: http://foro.elhacker.net/index.php/topic,82701.0.html======EN UN MODULO====== Option Explicit Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Public Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long Public Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const WM_GETTEXT = &HD Public Const WM_GETTEXTLENGTH = &HE Type LV_TEXT sItemText As String * 80 End Type Public CajaTexto As Long Public Function Procesos(ByVal hWnd2 As Long, lParam As String) As Boolean Dim Nombre As String * 255, nombreClase As String * 255 Dim Nombre2 As String, nombreClase2 As String, texto As LV_TEXT ' * 255 Dim X As Long, Y As Long, nCount As Long, jaja As Long X = GetWindowText(hWnd2, Nombre, 255) Y = GetClassName(hWnd2, nombreClase, 255)
Nombre = Left(Nombre, X) nombreClase = Left(nombreClase, Y) Nombre2 = Trim(Nombre) nombreClase2 = Trim(nombreClase) If nombreClase2 = "ThunderRT6TextBox" And Nombre2 = "Text1" Then MsgBox "Bien" CajaTexto = hWnd2 nCount = SendMessage(hWnd2, WM_GETTEXTLENGTH, 0, 0&) MsgBox "Bien2 " & nCount If nCount = 0 Then Exit Function jaja = SendMessage(hWnd2, WM_GETTEXT, nCount + 1, texto) MsgBox "Bien3 " & jaja MsgBox "Bien4 " & texto.sItemText Exit Function End If If Nombre2 = "" And nombreClase2 = "" Then Procesos = False Else Procesos = True End If End Function
=====EN UN FORM======= Dim hWnd1 As Long
Private Sub Command1_Click() hWnd1 = 0 If Ventana = True Then EnumChildWindows hWnd1, AddressOf Procesos, 1 'lParam Else hWnd1 = 0 CajaTexto = 0 End If Timer1.Enabled = True End Sub
Private Sub Timer1_Timer() If hWnd1 <> 0 Then Label1.Caption = "Encontrada" Call Procesos(CajaTexto, 0) EnumChildWindows hWnd1, AddressOf Procesos, 1 'lParam Else Label1.Caption = "PAILAS" hWnd1 = 0 CajaTexto = 0 Timer1.Enabled = False Call Command1_Click End If End Sub
Private Function Ventana() As Boolean hWnd1 = FindWindow(vbNullString, "Form1") If hWnd1 > 0 Then Ventana = True End Function ========================= poner un textbox, timer con intervalo de 1000 y enabled=false, y un boton, y haz otro programa cambiale a este el caption bye
|
|
« Última modificación: 20 Agosto 2005, 04:05 am por Anhur »
|
En línea
|
|
|
|
ViCrack€r
Desconectado
Mensajes: 49
|
Muchas Gracias por responder ZEALOT , es un código muy interesante aunque no lo he podio hacer funcionar seguramente por algún fallo mio.
Al final de lo que has escrito: ========================= poner un textbox, timer con intervalo de 1000 y enabled=false, y un boton, y haz otro programa cambiale a este el caption bye
Donde pone haz otro programa cambiale a este el caption, ¿Es otro programa igual al primero? ¿Cambiarle el caption a un TestBox, o será el Text?
Otra cosa más, en el módulo: MsgBox "Bien4 " & texto.sItemText
Veo que el sItemtext esta tipeado, pero el Texto que va delante desde donde se le hace referencia, ¿O será Texto un nombre que le has puesto a un control TestBox?
Venga ZEALOT, muchas gracias por responder y espero que me aclares mis dudas.
Una última pregunta, ¿este código funcionaría para capturar el contenido de un TestBox propiedad Text, que sea diferente del programa inicial que tu has explicado?
Porque este código, si no me equivoco es para dos programas iguales, pero ¿ Y si el 2 programa es diferente?
Gracias por la ayuda y saludos.
|
|
|
En línea
|
|
|
|
ZEALOT
Desconectado
Mensajes: 38
|
por cuestiones de tiempo he posteado a lo basto y no pude explicar que es lo que toca hacer, bueno entonces ahi va la explicacion: en un pimer proyecto(programa1) pega el codigo que te he escrito en el form de ese proyecto pon un timer con un intervalo de 1000 y enabled=false, pon tambien un commad button y un label y por ultimo DEBES cambiarle el caption al formulario. en el segundo proyecto(programa2) pon simplemente una caja de texto, y ponle el caption deseado al form, cuando hayas puesto caption al form, en el codigo del programa1(proyecto1) cambia donde dice: hWnd1 = FindWindow(vbNullString, "Form1")<---- "Form1" por tu caption del programa2. luego arranca o ejecuta los dos programas y presiona el command button y saldra en el label si el programa1 ha encontrado la ventana del programa2, cada 1 segundo el timer del programa1 va revisar si esta la ventana del programa2 para espiar la caja de texto de este. del codigo del modulo puedes quitar las siguientes lineas: "MsgBox "Bien3 " & jaja" Y "MsgBox "Bien2" & nCount", como te digo apenas si alcancè a hacer el codigo y postear, me estaban hechando del computer en lo referente a "MsgBox "Bien4 " & texto.sItemText" la variable texto o mejor la estructura texto tiene un miembro que es sItemText por eso puse "texto.sItemText" como podras ver mas arriba està la declaracion de la estructura en el modulo: Type LV_TEXT sItemText As String * 80 End Type y mas abajo declaramos texto "texto As LV_TEXT", usted dira: porque hizo una estructura y no una variable tipo string?, pues facil si la pongo tipo string como casi todos sabemos en vb el tipo de datos string tiene un formato diferente al conocido en c/c++, y haciendo una estructura nos referimos a una direccion de memoria ni siquiera funcionaria poniendo StrPtr(varString) que es un puntero a string en vb, y este es otro programa diferente al que postee en el thread que le di, me voy porque otra vez me estan hechando otra vez :'(
|
|
|
En línea
|
|
|
|
ViCrack€r
Desconectado
Mensajes: 49
|
Hola ZEALOT, estoy muy agradecido por tu rápida y clara respuesta, ha funcionado de maravilla, me detecta a la perfección si el segundo programa está en ejecución. Ahora para completar el programa me gustaría saber como poner en el primer programa el valor del textbox del segundo programa. Espero haberme explicado bien, se que no tanto como tu, pero lo he intentado. Otra vez mil gracias. Saludos.
|
|
|
En línea
|
|
|
|
|
kakinets
Desconectado
Mensajes: 414
[>Argentina<]
|
Usa el Control Winsock hay mucho en el foro
Suerte
|
|
|
En línea
|
|
|
|
ViCrack€r
Desconectado
Mensajes: 49
|
Hola ZEALOT, me he bajado los proyectos y los he probado, muchas gracias por tu atención prestada. La parte del programa que indica si está o no en marcha el programa2 me funciona a las mil maravillas, pero el Label5, debería poner uno de estos 2 estados: 1 - el valor que esta en el programa2 es el correcto2 - el valor que esta en el programa2 NO es el correctoPues no pone ni la primera opción ni la segunda, se queda en blanco, no se porque se queda en blanco. Y yo pongo en marcha los 2 proyectos y pongo un valor en el textbox del programa2, y despues hago click en el boton Combrobar del programa 1, te lo he escrito para que no pienses que lo hago mal, ¿O a lo mejor si? Espero que sea algo de fácil solución. Saludos. Pedronets, no voy a utilizar el control Winsock porque estos proyectos no necesitan para nada conexión a Internet, son dos programas para comunicarse dentro del mismo ordenador. Saludos.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
SendKeys no me funciona
Programación Visual Basic
|
usuario oculto
|
7
|
5,545
|
10 Diciembre 2010, 14:06 pm
por usuario oculto
|
|
|
SendKeys CONSULTA
Programación Visual Basic
|
ElJaime
|
7
|
3,048
|
17 Enero 2013, 14:30 pm
por ElJaime
|
|
|
sendkeys() con teclas especiales
.NET (C#, VB.NET, ASP)
|
El Benjo
|
2
|
3,355
|
25 Abril 2014, 18:35 pm
por El Benjo
|
|
|
Sendkeys!
Programación Visual Basic
|
Xhom
|
1
|
1,714
|
20 Septiembre 2015, 18:23 pm
por Miseryk
|
|
|
Sendkeys se ejecuta a destiempo
Programación Visual Basic
|
pichmanu
|
0
|
1,754
|
1 Mayo 2017, 23:09 pm
por pichmanu
|
|