Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-12-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por cesarsoftware Ver Mensaje
SOLUCIONADO.

Como no el problema lo tenia Delphi 2010, vamos digo yo, porque a mi no me funciona el codigo de eficsa, recordar que GetClassName me devuelve 0. ¿Usais Delphi 2010?

Es necesario y obligatorio preguntar cuanto va a ocupar el texto a leer y pedir que lea justo ese tamaño

Código Delphi [-]
procedure TFormMain.ListBox1Click(Sender: TObject);
var
  buffer: array[0..8192] of char;
  p: word;
  t: longint;
  handle: THandle;
  s: string;
begin
  s := ListBox1.Items[ListBox1.ItemIndex];
  p := Pos(' ' , s);
  s := Copy(s, 1, p - 1);
  handle := StrToIntDef(s, 0);
  if handle = 0 then
    Exit;
  // Obtener el tamaño del texto del control
  t := SendMessage(handle, WM_GETTEXTLENGTH, 0, 0);
  // Leer el texto del control
  SendMessage(handle, WM_GETTEXT, t + 1, Integer(@buffer));
  {
    si ponemos SizeOf(Buffer) o una constante distinta de t + 1 no funciona
    SendMessage(handle, WM_GETTEXT, SizeOf(Buffer), Integer(@Buffer));
  } 
end;
Hola cesarsoftware.

Primeramente me alegro de que hayas encontrado la solución al tamaño (lo tendré en cuenta cuando pueda usar otra versión de delphi).

Pero no entiendo por que estas obteniendo el handle del objeto a partir del texto del item del ComboBox/ListBox. El handle de cada objeto fué previamente guardado en el componente; entonces basta con:
Código Delphi [-]
procedure TfrBusca.ComboBox1Click(Sender: TObject);
var
  t: Longint;
  Buffer: array[0..8192] of char;
begin
  with ComboBox1 do
  begin
    t := SendMessage(TClassNfo(Items.Objects[ItemIndex]).Handle,
          WM_GETTEXTLENGTH, 0, 0);       // Obtener tamaño (para Delphi 2010)
    SendMessage(TClassNfo(Items.Objects[ItemIndex]).Handle,
      WM_GETTEXT,t+1, Integer(@buffer)); // obtener texto del objeto
    RichEdit1.Text:= Buffer;             // almacenar texto en RichEdit
  end;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #2  
Antiguo 12-12-2012
Avatar de cesarsoftware
cesarsoftware cesarsoftware is offline
Miembro
 
Registrado: nov 2006
Posts: 241
Poder: 20
cesarsoftware Va por buen camino
Hola ecfisa,

Lo hago porque como pinto el handle dentro del listbox (para ver el handle y la clase), asi me ahorro (de momento) tener el objeto dentro del listbox, sin mas.
Código Delphi [-]
  // Obtener los controles
  function CallbackFn(handle: Thandle; strings: TStrings): longbool; stdcall;
  var
    buffer: array[0..255] of char;
  begin
    Result := True;
    if GetClassName(handle, buffer, 256) <> 0 then
      // if buffer = 'TComboBox' then
      strings.Add(IntToStr(handle) + ' ' + buffer);
  end;

Lo que necesito ahora es distinguir cada objeto (ademas de por el handle), quiero decir que si tenemos dos TEdit ¿Cual de ellos es el que queremos usar?
Tendiendo el handle del objeto deberiamos porder obtener esa informacion ¿no? Pero no encuentro la funcion "GetObjectName".
¿Sabes cual es?

Un saludo.
Responder Con Cita
  #3  
Antiguo 12-12-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Es que eso he tratado de decirte cuando sugería comprobar si era un "Edit Control" (About Edit Control), por que según creo no es posible a partir de un identificador de ventana (HWND) externo a tu aplicación, obtener el nombre de una instancia VCL. Es decir, operando con el HWND podes obtener o cambiar, ventanas, texto, colores, tamaño, ubicación , etc, pero mediante llamas API.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 12-12-2012
Avatar de cesarsoftware
cesarsoftware cesarsoftware is offline
Miembro
 
Registrado: nov 2006
Posts: 241
Poder: 20
cesarsoftware Va por buen camino
Claro, es logico que no se compilen los nombres VCL, ¡es que lo queremos todo, jejeje!

En la aplicación que quiero capturar solo "se ve" un richedit (espero que sea eso o un memo, pero se le ven colores y formato, todavia no he pasado por el cliente para comprobarlo, ya que al ser un CAD y llevar mochila no puedo instalarlo en un pc mio), por lo que entiendo que no tendre problemas, pero para hacer un software "automático" deberiamos poder distinguirlo, supongo que se puede hacer por posicion, tamaño o algo, asi.

Si tengo novedades lo publico.

Thanks.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Leer parámetros que manda otra aplicación NPIdea API de Windows 2 14-09-2010 11:20:22
leer y escribir en archivos .txt o cualquier otra extension jafi666 Varios 1 13-03-2008 23:14:19
Leer texto de otra aplicación erika.martinez API de Windows 17 04-05-2007 00:45:15
leer cadena de otra aplicacion jar OOP 2 05-02-2007 20:18:12


La franja horaria es GMT +2. Ahora son las 23:23:46.


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