Capturar la salida de una aplicación DOS con Delphi
Utilizando TDosCommand. Dos Command 2.0 es un componente gratuito de Delphi. Lo podemos encontrar en Maxx's Delphi Site, y es libre de descarga. El componente es bastante fácil de instalar y de ejecutar, y mediante 3 líneas de código podemos capturar el stdout en un TMemo. El ejemplo que propongo es el siguiente:
Primero, podemos crear un bpl e instalar el fichero DosCommand.pas como un package. Pero también podemos crear un proyecto nuevo y agregarlo como fuente externa. Funciona de las 2 maneras. En ese caso, creo un nuevo proyecto, con un botón y un TMemo, y luego con el DosCommand agregado en mi proyecto escribo:
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ShellAPi, DOsCommand, ExtCtrls;
type
TFTest = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FTest: TFTest;
dos: TDosCommand;
implementation
{$R *.dfm}
procedure TFTest.Button1Click(Sender: TObject);
begin
dos.CommandLine := 'java -version';
dos.Execute;
end;
procedure TFTest.FormCreate(Sender: TObject);
begin
memo1.Clear;
dos := TDosCommand.create(self);
dos.OutputLines := memo1.lines;
end;
procedure TFTest.FormDestroy(Sender: TObject);
begin
FreeAndNil(dos);
end;
end.
una vez escribo el comando del cual quiero capturar su salida, le doy al botón get et voilà:
Aquí os dejo la aplicación de muestra ThundaxSTDOUT.exe, donde he puesto una textbox para entrar el comando que queráis. Aquí os dejo una muestra de la ejecución de un comando:
En la web de Lazarus, también he encontrado un componente llamado TProcess, que permite capturar la salida de un programa casi de la misma manera, utilizando un TStringList. Pero no acaba de funcionar. Os dejo los enlaces por si queréis indagar en el tema.
por que me salen letras chinas o caracteres raros con ejemplo y varios que e descargado
ReplyDeletepor que salen caracteres raros o chinos con tu ejemplo y varios que e descargado tene que ver con la conversion unicode esto usando XE3
ReplyDeleteHola Edgar,
DeleteMira que estes utilizando correctamente Unicode. Si tratas los datos en unicode y luego la salida no la tratas tambien en unicode, te saldran caracteres raros.
Jordi
Hola
ReplyDeleteEstoy add project esta unit DosComand.pas y me da el siguiente error, [dcc32 Error] DosCommand.pas(211): E2100 Data type too large: exceeds 2 GB, utilizo Delphi XE8. Le agradesco si me puede ayudar. muchas gracias
Buenas tardes¡ en caso de ejecutar dos o tres comandos
ReplyDeletecomo hacer para que ejecute el primero, luego el segundo y luego el tercer comando
gracias y saludos
Podrias mandar tu ejemplo y que RAD usas
DeleteHola Roberto,
DeleteMira el ejemplo que publique hace tiempo aqui y que muestra todo el codigo fuente:
http://thundaxsoftware.blogspot.co.uk/2012/12/capturing-console-output-with-delphi.html
Saludos,
Jordi