Jump to content


Photo

Indicar cuando acaba un proceso


  • Please log in to reply
10 replies to this topic

#1 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 260 posts

Posted 20 July 2011 - 09:46 PM

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
  • 2040 posts
  • LocationSanto Domingo

Posted 20 July 2011 - 11:12 PM

Mira esto y dime si eso es lo que necesitas

Delphi Al Limite



  • 0

#3 mightydragon_lord

mightydragon_lord

    Advanced Member

  • Miembros
  • PipPipPip
  • 73 posts

Posted 21 July 2011 - 09:14 AM

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

#4 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 260 posts

Posted 21 July 2011 - 08:52 PM

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
  • 2040 posts
  • LocationSanto Domingo

Posted 21 July 2011 - 11:21 PM

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 posts

Posted 22 July 2011 - 12:43 PM

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 posts

Posted 22 July 2011 - 02:14 PM

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

#8 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 260 posts

Posted 23 July 2011 - 05:47 PM

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 posts
  • LocationArgentina, Tucuman

Posted 25 July 2011 - 06:26 AM

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 posts

Posted 25 July 2011 - 07:46 AM



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 posts

Posted 25 July 2011 - 08:08 AM

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.