Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-01-2016
Avatar de StartKill
StartKill StartKill is offline
Miembro
 
Registrado: ene 2004
Posts: 299
Poder: 21
StartKill Va por buen camino
Question Leer caption de botenes de cualquier APP

Saludo a todos por fiestas del año nuevo.

A mi pregunta:
Deseo pasar el puntero del mouse sobre un boton de cualquier App y leer su caption, se puede?
o algun otro metodo para leer los caption de los button de cualquier App.


A la espera de su ayuda

Your Friend

StartKill
Lima-Perú
Responder Con Cita
  #2  
Antiguo 05-01-2016
orodriguezca orodriguezca is offline
Miembro
 
Registrado: ene 2009
Posts: 221
Poder: 16
orodriguezca Va por buen camino
Si se puede. En la empresa para la que trabajo el equipo de QA utiliza una herramienta para automatización de pruebas llamada TestComplete. Esa herramienta es capaz de hacer ese tipo de cosas y, algunas de las automatizaciones, casualmente consiste en verificar que los botones de la aplicación que se está "testeando" tienen los "captions" que se esperan.

Como dije, "Si se puede", pero ¿Como se puede?, No tengo ni idea
Responder Con Cita
  #3  
Antiguo 05-01-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Con "app" te refieres a los programas para iOS?
Responder Con Cita
  #4  
Antiguo 06-01-2016
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Se puede con la API, en concreto con el mensaje WM_GETTEXT.

Lo siguiente es un ejemplo de como usarlo desde delphi:
Código Delphi [-]
var
  P: TPoint;
  hWind: HANDLE;
  Buffer: array [0..255] of CHAR;
begin
  // Localizamos la ventana a la que apunta el mouse...
  GetCursorPos(P);
  hWnd:= WindowFromPoint(P);

  // Leemos su caption...
  SendMessage(hWnd, WM_GETTEXT, 255, Cardinal(@Buffer[0]));

  // y lo mostramos en un MessageBox
  MessageBox(0, @Buffer[0], 'El Caption es:'); 
end;

Saludos.
Responder Con Cita
  #5  
Antiguo 06-01-2016
Avatar de StartKill
StartKill StartKill is offline
Miembro
 
Registrado: ene 2004
Posts: 299
Poder: 21
StartKill Va por buen camino
Muy buenas con el foro

Antes de todo gracias por el interes a mi problema;

Etimado orodriguezca, por lo menos ya se que no era una locura mia

Cita:
Por: Casimiro Notevi
¿Con "app" te refieres a los programas para iOS?
No, me refiero a Aplicaciones Windows

Código Delphi [-]
 Por: escafandra
var
  P: TPoint;
  hWind: HANDLE;
  Buffer: array [0..255] of CHAR;
begin
  // Localizamos la ventana a la que apunta el mouse...
  GetCursorPos(P);
  hWnd:= WindowFromPoint(P);

  // Leemos su caption...
  SendMessage(hWnd, WM_GETTEXT, 255, Cardinal(@Buffer[0]));

  // y lo mostramos en un MessageBox
  MessageBox(0, @Buffer[0], 'El Caption es:'); 
end;
Si no me equivoco este código es para obtener los caption de un aplicativo

//-------------
Siendo un poco mas explicito con mi duda:

Es un aplicativo que muestra un conjunto de botones de forma aleatoria ( pero siempre son los mismos caption )

El orden de los caption de los botones puede ser:
-> Implantar, Dregradar, Abrir, Aceptar, Cancelar

Otras veces es:
-> Implantar, Cancelar, Dregradar, Aceptar, Abrir
y todas las permutaciones que pudieran existir...

Tengo las coordenadas de los botones, pero no se en que boton automatizar el click.. por ello mi interes de capturar el caption del boton donde se encuentre el mouse antes del click automático ( logicamente sin hacer click sobre el para obtener el caption...)

Your Friend

StartKill
Lima-Perú
Responder Con Cita
  #6  
Antiguo 06-01-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por StartKill Ver Mensaje
Si no me equivoco este código es para obtener los caption de un aplicativo
Ese código hará lo que buscas. Recuerda que un botón es también una ventana. En todo caso, puedes complementar el código con GetClassName para determinar si la ventana bajo el cursor del ratón corresponde a un botón.

// Saludos
Responder Con Cita
  #7  
Antiguo 06-01-2016
Avatar de StartKill
StartKill StartKill is offline
Miembro
 
Registrado: ene 2004
Posts: 299
Poder: 21
StartKill Va por buen camino
Hola a todos

Tenias razón escafandra

Gracias roman por darme la pista

Código Delphi [-]
procedure TForm17.FormCreate(Sender: TObject);
begin
   Form17.FormStyle := fsStayOnTop;
   Timer1.Interval := 50;
end;

procedure TForm17.ShowHwndAndClassName(CrPos: TPoint);
var
   hWnd: THandle;
   aName: array [0 .. 255] of Char;
   Buffer: array [0..255] of CHAR;
begin
   hWnd := WindowFromPoint(CrPos);
   Label1.Caption := 'Handle :  ' + IntToStr(hWnd);

   if Boolean(GetClassName(hWnd, aName, 256)) then begin
      Label2.Caption := 'ClassName :  ' + string(aName);
      SendMessage(hWnd, WM_GETTEXT, 255, Cardinal(@Buffer[0]));
      label3.Caption:= string(Buffer);
   end
   else
      Label2.Caption := 'ClassName :  not found';
end;

procedure TForm17.Timer1Timer(Sender: TObject);
var
   rPos: TPoint;
begin
   if Boolean(GetCursorPos(rPos)) then
      ShowHwndAndClassName(rPos);
end;

En base a sus recomendaciones empecé a buscar y añadi la lineas del código de escafandra ...

http://www.swissdelphicenter.ch/torr...ode.php?id=141

Gracias a todos

Your friend

StartKill
Lima-Perú
Responder Con Cita
  #8  
Antiguo 07-01-2016
Avatar de StartKill
StartKill StartKill is offline
Miembro
 
Registrado: ene 2004
Posts: 299
Poder: 21
StartKill Va por buen camino
Saludos nuevamente

El código expuesto debería leer los caption de cualquier elemento de cualquier App.
Código Delphi [-]
procedure TForm17.FormCreate(Sender: TObject);
begin
   Form17.FormStyle := fsStayOnTop;
   Timer1.Interval := 50;
end;

procedure TForm17.ShowHwndAndClassName(CrPos: TPoint);
var
   hWnd: THandle;
   aName: array [0 .. 255] of Char;
   Buffer: array [0..255] of CHAR;
begin
   hWnd := WindowFromPoint(CrPos);
   Label1.Caption := 'Handle :  ' + IntToStr(hWnd);

   if Boolean(GetClassName(hWnd, aName, 256)) then begin
      Label2.Caption := 'ClassName :  ' + string(aName);
      SendMessage(hWnd, WM_GETTEXT, 255, Cardinal(@Buffer[0]));
      label3.Caption:= string(Buffer);
   end
   else
      Label2.Caption := 'ClassName :  not found';
end;

procedure TForm17.Timer1Timer(Sender: TObject);
var
   rPos: TPoint;
begin
   if Boolean(GetCursorPos(rPos)) then
      ShowHwndAndClassName(rPos);
end;
No me funciona con un aplicativo de un tercero instalado en una empresa...

Para salir de la duda lo probé con otros aplicativos conocidos, por ejemplo con:
-Calculadora en el windows 7 (llevo el mouse sobre algun boton y no me lee el caption)
-Total commander (Solo con algunos botones no lee el caption)

No me funcionó como esperaba, ...

A la espera de sus respuestas...

Your friend

Startkill
Lima-Perú

Última edición por StartKill fecha: 07-01-2016 a las 16:54:13.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cambiar Caption de Cualquier Objeto rjtostado Varios 3 15-10-2008 18:01:31
leer y escribir en archivos .txt o cualquier otra extension jafi666 Varios 1 13-03-2008 23:14:19
caption ????? en zreport Manuel Impresión 1 12-10-2006 16:35:53
TString en los caption buitrago Varios 3 14-08-2004 19:54:13
Caption del toolbutton jourdan OOP 0 14-04-2004 22:27:27


La franja horaria es GMT +2. Ahora son las 16:05:11.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi