PDA

Ver la Versión Completa : Win Api, handles y capturar texto de un textbox


fonx
20-08-2007, 10:18:36
Hola, os expongo lo que quiero hacer y me comentais si es posible en delphi:

quería hacer un programa que capture el texto de un componente de texto de otra ventana. En c y c++ es posible. Cojo el handle del componente de texto y mediante mensajes me dice cuantas líneas hay en el componente y yo voy cogiendo la línea que quiera, así que podría coger desde la línea 1 hasta la última que aparezca.

Esto es la teoría y debería funcionar. El caso es que empecé a hacer la aplicación en c++ pero los IDE que probé (Dev-c++ y MSVS2005) no tienen interfaz para hacer los formularios graficamente así que me puse a mano a hacer los formularios y estoy un poco hasta el gorro porque cada dos por tres me atasco.

Sin embargo los formularios en delphi se hacen estupendamente y en dos clicks, y la programación es muy llevadera entonces estaba pensando si se podría llegar hasta ese nivel con el api de windows en delphi.

Bicho
20-08-2007, 11:01:34
Hola,

si quieres una respuesta corta, es decir, ¿se puede hacer con Delpi?
Entonces si se puede.

Quieres más detalles de como hacerlo. Tú idea es buena y además la más lógica. Busca por los foros y hallarás mucha información al respecto, se ha debatido otras veces éste tema. Para muestra un botón (http://www.clubdelphi.com/foros/showthread.php?t=38908)
Si te quedas estancado en algo en concreto, postéalo e intentamos solucionarlo entre todos.

Saludos

fonx
20-08-2007, 11:27:49
Muy interesante Bicho, muchas gracias, le tengo q echar un ojo muy detenidamente :).

fonx
21-08-2007, 11:05:57
Bueno chicos/as, vamos con resultados. Antes de nada tengo q decir q no use delphi sino VB.NET por el motivo de que en casa no tengo ningun compilador de Delphi y estas pruebas no las puedo hacer aquí en el trabajo, queria conseguir el 7 pero como q de un día para otro así q hice pruebas con el vb porque la API de Windows sigue siendo la misma así como las llamadas, no? Bueno, si el moderador cree que no puedo postear pq no lo hice en Delphi...tendré q acatar la decision, aunq no voy a poner código salvo las llamadas.

Primero decir q...FUNCIONO!!!! :)...pero luego añadir que....DEJO DE FUNCIONAR!!! :mad::mad::mad:

Mi bucle es el siguiente (mas o menos en pseudocodigo):

sCurLine es un string, con espacio reservado para 80 caracteres.
k, i son enteros, comento q antes eran long pero no funcionaba y era pq tienen q ser enteros de 32 bits, y en la arquitectura win32 integer ya es de 32 bit por lo que no hay q usar long, q en win32 son de 64 bits, por lo menos para vb.net

k = SendMessage(un_handle, EM_GETLINECOUNT, 0, 0)
esto siempre fuciona, siempre me devuelve un número, y en cada ejecución crece más, logico, cada vez hay más líneas.

Para i = 0 Hasta k - 1
SendMessage(un_handle, EM_GETLINE, i, sCurLine)

Bueno, el caso es que cuando lo probe por primera vez funcionó, me cargaba en sCurLine la línea correspondiente. Entonces seguí adelante y puse código para guardar el string en un fichero y como no me ponia bien los saltos de línea fui haciendo pruebas debug-stop-debug-stop-debug-stop....hasta q de repente veo que ya no me guarda en el string nada a pesar de coger la información desde la primera linea. sCurLine en cada pasada del bucle es un string de 80 blancos.

Reinicié el ordenador y volvi a depurar y funcionó, pero al parar y volver a depurar dejó de funcionar :( y ya no lo he vuelto a conseguir desde entonces. No se porque no funciona.

¿Puede ser que la aplicación q intento analizar detecte lo que estoy haciando y cambie la forma de trabajar? No es una aplicación instalada como administrador.
¿Puede ser que con tantas llamadas al SendMessage algo bloquee el acceso?

¿Que diferencia habría con WM_GETTEXT? Hasta lo que lei sobre la API, todos los componentes q aparecen en una ventana realmente son ventanas tb, podría coger todo el texto del tirón en lugar de línea a línea?

Espero no ser muy pesado, gracias de antemano si alguien me puede ayudar.