Ir al contenido


Foto

Indicar cuando acaba un proceso


  • Por favor identifícate para responder
10 respuestas en este tema

#1 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 260 mensajes

Escrito 20 julio 2011 - 09:46

Buenas amigos ..........tengo una duda y quisiera que me dieran una mano.
miren tengo un programita que externamente ejecuta el "cmd" y a la vez unos
comandos para éste.
Todo trabaja bien pero me gustaría que cuando acabe de hacer su trabajo el
"cmd" automaticamente me aparezca un cuadro de dialogo indicando que todo
ha finalizado.

este es el código que uso:




delphi
  1. unit registro;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.   Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  9.   StdCtrls, ExtCtrls, MaskEdit, ShellAPI;
  10.  
  11. type
  12.  
  13.   { TForm1 }
  14.  
  15.   TForm1 = class(TForm)
  16.     Bevel1: TBevel;
  17.     Button1: TButton;
  18.     Button2: TButton;
  19.     Edit1: TEdit;
  20.     Label1: TLabel;
  21.     Label3: TLabel;
  22.     procedure Button1Click(Sender: TObject);
  23.     procedure Button2Click(Sender: TObject);
  24.   private
  25.     { private declarations }
  26.   public
  27.     { public declarations }
  28.   end;
  29.  
  30. var
  31.   Form1: TForm1;
  32.   SW_SHOW, SW_SHOWNORMAL: integer;
  33.  
  34. implementation
  35.  
  36. { TForm1 }
  37.  
  38. procedure TForm1.Button1Click(Sender: TObject);
  39. begin
  40.  
  41.   ShellExecute(Form1.Handle, nil, 'cmd.exe', '/c dir /s>c:\registro.txt', nil, SW_SHOWNORMAL);
  42.  
  43.   begin
  44.     showmessage('Se acabo....todo');
  45.   end;
  46. end;
  47.  
  48. procedure TForm1.Button2Click(Sender: TObject);
  49. begin 
  50.  
  51. end;
  52.  
  53. initialization
  54.   {$I registro.lrs}
  55.  
  56. end.




como se abran dado cuenta abajo del código de shellexecute puse:



delphi
  1. begin
  2.     showmessage('Se acabo....todo');
  3. end;



Pensando que me iba a ayudar, pero lo que hace es mostrar la ventanita ni bien
presiono el boton para que comienze todo...... y lo que me gustaría es que
salga la ventanita de showmessage cuando acabe de trabajar el "cmd" lo cual
le toma un tiempo.

Les pido su ayuda, gracias.

  • 0

#2 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 20 julio 2011 - 11:12

Mira esto y dime si eso es lo que necesitas

Delphi Al Limite



  • 0

#3 mightydragon_lord

mightydragon_lord

    Advanced Member

  • Miembros
  • PipPipPip
  • 73 mensajes

Escrito 21 julio 2011 - 09:14

Esto es lo que necesitas
http://wiki.freepasc...nal_Programs/es
  • 0

#4 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 260 mensajes

Escrito 21 julio 2011 - 08:52

gracias por sus respuestas
he encontrado unos pasos utilizando  "Tprocess"
lo probaré y mañana si es posible les traigo el código..........

  • 0

#5 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 21 julio 2011 - 11:21

Perdona, pero por la rapidez, no me vi que era para lazarus.  La edad no perdona!!! :
  • 0

#6 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 260 mensajes

Escrito 22 julio 2011 - 12:43

Buenas amiguitos, como les decía aca les traigo mis avances
este es el código que de momento me ha ayudado, pero no se si habría
alguna manera de ocultar la ventanita del CMD para que solo se vea
el programa principal, o si es posible minimizar este CMD.

bueno ahí les mando mi código:





delphi
  1. unit Unit1;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.   Classes, SysUtils, FileUtil, process, Forms, Controls, Graphics, Dialogs,
  9.   StdCtrls;
  10.  
  11. type
  12.  
  13.   { TForm1 }
  14.  
  15.   TForm1 = class(TForm)
  16.     Button1: TButton;
  17.     procedure Button1Click(Sender: TObject);
  18.   private
  19.     { private declarations }
  20.   public
  21.     { public declarations }
  22.   end;
  23.  
  24. var
  25.   Form1: TForm1;
  26.   unproceso: tprocess;
  27.  
  28. implementation
  29.  
  30. {$R *.lfm}
  31.  
  32. { TForm1 }
  33.  
  34. procedure TForm1.Button1Click(Sender: TObject);
  35. begin
  36.   unproceso:= Tprocess.Create(nil);
  37.   unproceso.CommandLine:='"C:\Windows\System32\cmd.exe" /c dir /s';
  38.   //unproceso.Options:= unproceso.Options + [poNoConsole];  // este lo puse para que la consola se oculte pero da problemas.
  39.   unproceso.Options:= unproceso.Options + [poWaitOnExit];
  40.   unproceso.Execute;
  41.   unproceso.Free;
  42.   begin
  43.     showmessage('Listo.....!!!!!');
  44.   end;
  45. end;
  46.  
  47. end.






Agradezco cualquier ayuda.......
  • 0

#7 mightydragon_lord

mightydragon_lord

    Advanced Member

  • Miembros
  • PipPipPip
  • 73 mensajes

Escrito 22 julio 2011 - 02:14

[pascal]TProcess.ShowWindow := swoNone;[/pascal]
  • 0

#8 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 260 mensajes

Escrito 23 julio 2011 - 05:47

Gracias mightydragon_lord por tu respuesta  pero al probarlo sigue sin ocultar el cmd, te paso mi código para que vean que estoy haciendo mal:



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3.   unproceso:= Tprocess.Create(nil);
  4.   unproceso.ShowWindow := swoNone;  // este es el código de mightydragon_lord
  5.   unproceso.CommandLine:='"C:\Windows\System32\cmd.exe" /c dir /s';
  6.   //unproceso.Options:= unproceso.Options + [poNoConsole];  // este lo puse para que la consola se oculte pero da problemas.
  7.   unproceso.Options:= unproceso.Options + [poWaitOnExit];
  8.   unproceso.Execute;
  9.   unproceso.Free;
  10.   begin
  11.     showmessage('Listo.....!!!!!');
  12.   end;
  13. end;



gracias por su tiempo.....
  • 0

#9 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 25 julio 2011 - 06:26

Yo para esconder ventanas, hago lo siguiente. a lo que tu quieres hacer lo guardo en un archivo .bat o sea crea un archivo bat con la instrucción que tu mandas.
Luego con un programa llamado "Quick Batch File Compiler" genero un .exe sin ventanas, es un programa muy intuitivo que recibo un .bat y genera un .exe sin ventana, luego desde tu aplicación lo único que debes hacer es llamar al .exe.

No se si te servirá, pero prueba lo y cuéntanos como te fue.

PD: El programa Quick Batch File Compiler, es ideal para crear script que hacen backup en la base de datos y luego desde "tareas programadas de windows" lo llamen, de esa manera te evitas que el usuario cierre la ventana de dos y que el backup no se realice.



  • 0

#10 mightydragon_lord

mightydragon_lord

    Advanced Member

  • Miembros
  • PipPipPip
  • 73 mensajes

Escrito 25 julio 2011 - 07:46



delphi
  1. TProcess.[color=rgb(32, 32, 32)]ShowWindow[/color] := swoNone;



Este también te puede servir.
  • 0

#11 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 260 mensajes

Escrito 25 julio 2011 - 08:08

Gracias mightydragon_lord  probaré tu respuesta..............

y a martinartaza también gracias por el dato, aunque ya conocía programas como el que mencionas y una idea que se me ocurre es:

sería posible este BAT meterlo dentro de mi EXE para sea uno solo o en tal caso......


  • 0




IP.Board spam blocked by CleanTalk.