PDA

Ver la Versión Completa : ejecutar programas DOS


artemisa
17-09-2005, 17:53:18
Necesito ejcutar una sentencia DOS, desde el delphi ¿como lo hago?, en realidad lo que quiero hacer es empaquetar un archivo con winrar, como winrar tiene sentencias y parametros para dos no mas tengo que ejecutar una sentencia.

De antemano, gracias por su ayuda

Artemisa:)

marcoszorrilla
17-09-2005, 18:29:40
Puedes mirarte la ayuda sobre Winexec.

Un Saludo.

artemisa
17-09-2005, 18:46:56
No encuentro ayuda de winexec en la ayuda del delphi, ¿donde la encuentro?, Aprovecho para preguntar donde encuentro ese programa la Base del Conocimiento del Delphi, gracias

dec
17-09-2005, 19:13:08
Hola,


No encuentro ayuda de winexec en la ayuda del delphi, ¿donde la encuentro?

En la ayuda del SDK Win32, disponible desde el menú de ayuda de Delphi.

Loviedo
17-09-2005, 22:20:27
No se si es esto lo que buscas.


procedure TForm1.CopiaSeguridadDB1Click(Sender: TObject);
var
mCompresor,mArgumentoC,mArgumentoR: string;
begin
mCompresor := 'C:\Archivos de Programa\Winrar\Winrar.exe';
mArgumentoC := 'a -v -vd A:\Copiaseg C:\Carbatex\Db\*.*';
mArgumentoR := 'e -v A:\Copiaseg C:\Carbatex\Db';
ShellExecute(Form1.Handle,nil,PChar(mCompresor),Pchar(mArgumentoC),'',SW_SHOWNORMAL)
end;


No olviadr poner en Uses la unidad ShellApi.
Saludos.

crespopg
04-05-2007, 17:17:41
aqui un ejemplo:
unit mprotu;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ShellApi, ExtCtrls, jpeg;
type
TForm1 = class(TForm)
Timer1: TTimer;
Label1: TLabel;
Label2: TLabel;
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
tot:byte;
act,min:array[1..20] of byte;
mins,coma:array[1..20] of string;
strt1:string;
arch:TextFile;

implementation
{$R *.dfm}
procedure leer;var i:byte;
Begin
If FileExists('conft.txt') Then
Begin
AssignFile(arch,'conft.txt'); Reset(arch);
Readln(arch,tot);
for i:=1 to tot do Readln(arch,min [i],act [i]);
for i:=1 to tot do Readln(arch,coma[i]);
Closefile(arch);
end
Else
Begin
tot:=5;
for i:=1 to tot do Begin min[i]:=i; act [i]:=1; End;
for i:=1 to tot do coma[i]:='c:\agma29\dir2.bat c:\agma29\*.cli';
End;
strt1:=':';
for i:=1 to tot do
Begin
str(min[i]:1,mins[i]);if min[i]<=9 then mins[i]:='0'+mins[i];
strt1:=strt1+'/'+mins[i];
End;
form1.Label2.Caption:=strt1;
End;
procedure presen;
var arch:textfile;lins2:byte;
Begin
if (lins2<80) then Form1.Label1.Font.Color:=ClTeal;
if (lins2<45) then Form1.Label1.Font.Color:=ClGreen;
if (lins2<20) then Form1.Label1.Font.Color:=ClOlive;
if (lins2< 5) then Form1.Label1.Font.Color:=ClMaroon;
End;
procedure TForm1.Timer1Timer(Sender: TObject);
var strt1,min2s,seg2s:string;i:byte;
begin
strt1:=TimeToStr(time);
min2s:=copy(strt1,4,2);
seg2s:=copy(strt1,7,2);
form1.Caption:=strt1;
{form1.Text:= label1.Caption;
Form1.Hint:= label1.Caption;}
if (min2s[2]='5') and (seg2s='00') Then form1.Refresh;
if (min2s[2]='0') and (seg2s='00') Then
presen;
if (min2s='00') and (seg2s='00') Then leer;
for i:=1 to tot do
Begin
if (min2s=mins[i]) and (seg2s='00') and (act[i]=1) Then
Begin
ShellExecute(Form1.Handle,nil,Pchar(coma[i]),'','',SW_SHOWNORMAL);
End;
End;
end;
procedure TForm1.FormCreate(Sender: TObject);var i:byte;
begin
Form1.Label1.Caption:=':.:';
TimeSeparator:=':';
LongTimeFormat := 'hh:nn:ss';
leer;
end;
end.
refresca cada 10 minutos al minuto 5, es decir 5,15,25,35,45 y 55
if (min2s[2]='5') and (seg2s='00') Then form1.Refresh;
Cambia de Fondo cada 10 Minutos al minuto 0, es decir 0,10,20,30,40y 50
if (min2s[2]='0') and (seg2s='00') Then presen;
Actualiza (Vuelve a leer el archivo de configuracion a la hora exacta
if (min2s='00') and (seg2s='00') Then leer;

JGCG
04-05-2007, 23:46:48
Otra opción que tienes es utilizar la instrucción winexec, pero como la instrucción de Dos en este caso tiene paramétros y en lo particular a mí no me funciona bien cuando tengo que mandar parametros con winexec o shellexecute o no he encontrado la forma mas apropiada de hacerlo (si alguien me puede dar un ejemplo se lo agradeceria mucho), lo que me funciona es meter la instrucción de Dos en un archivo .bat y ejecutar el archivo .bat. un ejemplo es así:

procedure TForm1.Button1Click(Sender: TObject);
begin
winexec('c:\algo\autoexec2.bat',1);
end;

en el archivo .bat va la instrucción de dos por ejemplo:
programa argumentos