Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Capturar texto de otro programa (https://www.clubdelphi.com/foros/showthread.php?t=79884)

PAL911 18-08-2012 20:58:52

Capturar texto de otro programa
 
Hola amigos.

Hace rato que los leo y realmente me han ayudado varias veces. Ahora estoy en un proyecto personal, que ya les explicaré de que se trata, y necesito saber si es posible capturar texto a mi programa Delphi desde otro programa ejecutándose en la PC. Se trata del programa del scanner de inyección de mi auto, el cual no me muestra todos los valores de la inyección en su tabla, pero tiene un modo "debug" donde veo la trama original de datos que sale del calculador de inyección, y ahí si está todo y se que es cada valor. Pero cada valor hay que afectarlo por un factor de conversión para tener una cifra entendible por un humano (los originales son hexadecimales y la salida de los A/D generalmente). Entonces, mi idea es capturar los valores, que están en un recuadro de la pantalla (puedo subir una captura si les facilito la tarea de entenderme) y procesarlos con un programa mio para que me vaya corrigiendo los valores en "tiempo real" (se actualiza dos o tres veces por segundo la trama de datos)
Si alguien tiene idea, desde ya le agradezco la ayuda, y si necesitan la captura de pantalla, me avisan y veo como se hace para subirla.

Muchas gracias y espero poder aportarles algo algún día!!

v:-)v

Casimiro Noteví 18-08-2012 22:13:36

Hola, lo que no me queda claro es... ¿en qué quieres que te ayudemos?, ¿en pasar valores hexa a decimal?

PAL911 18-08-2012 22:25:02

No, eso lo se hacer! :D Lo que necesito saber es si es posible (y como) capturar los datos que están en la pantalla del otro programa para usarlos en el mio...

alsn 21-08-2012 12:56:59

Hola, podrías probar a obtener el manejador del control que muestra los datos con FindWindow y FindWindowEx. Y una vez obtenido, con SendMessage y WM_GETTEXT conseguir esos datos.

Una forma de ver si se puede es que crees un programa con un Timer y un Memo. Y en el evento timer poner el código:


Código Delphi [-]
procedure TForm1.Timer1Timer(Sender: TObject);
var
  hwnd : THandle;
  mousepnt : TPoint;
  WndName, ClsName : String;
  s, sTexto: String;
  Len: Longint;
begin
  GetCursorPos(mousepnt);
  hwnd := WindowFromPoint(mousepnt);
  SetLength(WndName, 255);
  GetWindowText(hwnd, PChar(WndName), 255);
  WndName := PChar(WndName);
  SetLength(ClsName, 255);
  GetClassName(hwnd, PChar(ClsName), 255);
  ClsName := PChar(ClsName);

  sTexto := '';
  Len := SendMessage(hwnd, WM_GETTEXTLENGTH, 0, 0);
  if Len > 0 then
  begin
    SetLength(sTexto, Len);
    SendMessage(hwnd, WM_GETTEXT, Len + 1, Longint(Pchar(sTexto)));
  end;

  s := 'Nombre Clase:   ' + ClsName + #13#10 +
       'Nombre Ventana: ' + WndName + #13#10 +
       'Texto:          ' + sTexto;

  if Memo1.Text <> s then
    Memo1.Text:=s;
end;

Comprobar entonces si al situar el ratón encima de los datos que quieres estos llegan a obtenerse.

Saludos

PAL911 21-08-2012 15:50:47

Muchas gracias alsn!! Eso es justo lo que necesito. Imaginaba que había alguna API que realizara el trabajo de leer valores desde otra ventana, pero no lograba encontrar cual era. Lo pruebo y les comento!!

v:-)v

PAL911 22-08-2012 01:17:24

Bueno, he probado corriendo ese código y colocando el cursor sobre los valores que necesito y lo que sale es que es:

Nombre Clase: AfxFrameOrView42s
Nombre Ventana:
Texto:

lamentablemente estuve buscando en internet y parece que no puede obtenerse los valores de ese control... será tan así? :(

Saludos!!


La franja horaria es GMT +2. Ahora son las 11:35:32.

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