¿Es posible recuperar el texto de un control label mediante API's?

Iniciado por TFL, 6 Noviembre 2006, 20:58 PM

0 Miembros y 3 Visitantes están viendo este tema.

TFL

Hola a todos,
Tras andar buscando y buscando me he decido a preguntar, no se si es algo imposible pero ahí va ...
Estoy intentando obtener el texto de las etiquetas de un formulario de una aplicación de VB.
¿Existe alguna forma de localizar los controles sin ventana, por ejemplo el control label, mediante API's?
Según he leído los controles sin ventana no envían ni reciben mensajes, entonces, que mecanismo se utiliza cuando se cambia el texto de la etiqueta mediante la expresión:
Form1.Label1.Caption = "HOLA"
¿Se imprime el texto en una región predefinida del área cliente de la ventana del formulario?
¿Son las etiquetas regiones independientes de la ventana del formulario y tienen algún manejador alternativo?
Bueno...., muchas preguntas son, a ver si podéis arrojar algo de luz sobre mi problema.
Gracias.

Hendrix

 :o :o :o no e entendido ninguna palabra, explikate mejor... ;) ;)

PD: Para el moderador, que borre el otro post, ya que kon un post es suficiente.

Salu2

"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián

sircid

habra sido un despite o un error y habra posteado dos veces.

creo que la label no es mas que eso que tu dices. un print con propiedades top, left. si intentas pedir el caption de una label desde vb6 no podras hacerlo como lo haces con un text. no se si con apis se podra.

tan necesario se te hace para que no puedas prescindir de ello?

LeandroA


Kizar

Cita de: LeandroA en  7 Noviembre 2006, 02:18 AM
HOLA NO SE PUEDE PUES NO TINE HWND

Hay le has dao, no tiene Handle, controles como el textbox., button y demas si que se puede coger el texto desde cualquier ventana, pero el label no es mas que un dibujo en el formulario.

NekroByte

Un Label no es ningún dibujo ni nada, es una ventana, por lo tanto tiene un hWnd.

Lo que ocurre es que es una ventana hija de la instancia de tu aplicación, y para encontrar su hWnd primero debes encontrar el de la madre y luego usar la api EnumChildWindows para que te liste todos. O más fácil: con Label.hWnd y listo, jaja, sin tanta complicación.

Para obtener lo que tiene escrito es con GetWindowName().

LeandroA

Cita de: NekroByte en  8 Noviembre 2006, 00:41 AM
Un Label no es ningún dibujo ni nada, es una ventana, por lo tanto tiene un hWnd.

Lo que ocurre es que es una ventana hija de la instancia de tu aplicación, y para encontrar su hWnd primero debes encontrar el de la madre y luego usar la api EnumChildWindows para que te liste todos. O más fácil: con Label.hWnd y listo, jaja, sin tanta complicación.

Para obtener lo que tiene escrito es con GetWindowName().


mmm, que error  ;D hay ventanas que no poseen hwnd una de ellas es el label (que si te fijas no posee la propiedad label1.hwnd)y otra por ejemplo es el control image, si has echo alguna ves un ocx fijate en la ventana del usercontrol que tienen una propiedad llamada  windowless y veras que es ta pierde las propiedades de una ventana convencional (hija o no ) es masomenos como una forma de dibujo y no una ventana , y fijate que quita el hwnd

TFL

En pimer lugar, perdón por el doble post, fue debido a un error de envío..., y agradecer vuestro interés.
Estoy de acuerdo con vosotros en que el control label de VB es un control sin ventana (sin hwnd), y que posiblemente se dibuje en el área cliente del formulario.
Considerando esto último pensé que la etiqueta podría encontrarse en una región determinada del área cliente del formulario y a partir del hwnd y el hdc del formulario que contiene al control label y utilizando las funciones API gráficas del "gdi32" podría encontrar un manejador para la región y a partir de él el texto del control label.
Bueno..., pues tras buscar API's sólo pude escribir en regiones del área cliente mediante la función TextOut (junto con otras), obtener manejadores de regiones definidas por mí mediante
funciones como CreateRectRgn, GetClipRgn, y en fin, sólo escribir y dibujar sobre la ventana del formulario...
¿Es éste un buen camino?, lo digo porque como hay muchísimas API's puede que no haya dado con ella ...
Quizás la solución podría estar en saber qué son para windows los controles sin ventana, es decir, al igual que los controles con ventana son identificados por el hwnd, ¿cómo identifica a los controles sin ventana?
Creo que si es posible cambiar el texto del control label desde código (Form1.Label1.Caption ="HOLA"), existirá alguna forma de localizar ese texto.
¿Es posible?, ¿Alguna sugerencia?...
Salu2.

tena

solo por curiosidad, me hice una pequeña aplicacion pedorra con un label, y al fijarme con el Microsoft Spy++ de VB solamente me mostraba el form y ninguna ventana hija, asi que como la mayoria de aqui concluyo que no tiene handle.

Saludos