Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-05-2011
emii89 emii89 is offline
Miembro
 
Registrado: jul 2010
Posts: 18
Poder: 0
emii89 Va por buen camino
Programa como .bat

Hola chicos! estoy tratando de crear un programita para programar el apagado de mi pc.

El código en el .bat es sencillo... simplemente es una línea:

shutdown /s /t (segundos)

y para cancelarlo es shutdown -a

Ahora, el programita que quiero lograr es poder escribir en un edit, en cuanto tiempo quiero que se apague la pc, y otro botón para cancelarlo...

Cómo debo hacer??

Me conviene crearlo desde un txt y grabarlo como .bat?? puedo eliminar un bat después de creado?

Última edición por emii89 fecha: 05-05-2011 a las 22:35:55.
Responder Con Cita
  #2  
Antiguo 05-05-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Muchas preguntas, poco codigo.
En mi caso, como no se de esto, me parece que seria interesante ver como haces todo eso.
Si copias y pegas el codigo aqui, aprenderemos un monton.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 05-05-2011
emii89 emii89 is offline
Miembro
 
Registrado: jul 2010
Posts: 18
Poder: 0
emii89 Va por buen camino
Creo que ya tengo la idea... necesito crear un txt a través de un memo. Luego, guardarlo como .bat y ejecutarlo. Después borrarlo. Será muy dificil?
Responder Con Cita
  #4  
Antiguo 05-05-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
La respuesta corta: NO, NO.
Saludos
PD: Como me gustaria ver ese codigo, me mata la curiosidad.
__________________
Siempre Novato
Responder Con Cita
  #5  
Antiguo 05-05-2011
emii89 emii89 is offline
Miembro
 
Registrado: jul 2010
Posts: 18
Poder: 0
emii89 Va por buen camino
Lo estoy consiguiendo!

Cita:
procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.lines.add('shutdown /s /t '+edit1.text);
memo1.lines.SaveToFile('c:\apagar.bat');
memo1.lines.clear;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
memo1.lines.add('shutdown -a');
memo1.Lines.SaveToFile('c:\apagar.bat');
memo1.lines.clear;
end;
Necesito poder ejecutar y eliminar el .bat desde el código... podré? :P
Responder Con Cita
  #6  
Antiguo 05-05-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Yo creo que vas muy bien, claro que podras.
Ahora, una sugerencia, coloca la direccion del archivo .bat en el mismo exe (Application.ExeName).
Saludos
__________________
Siempre Novato
Responder Con Cita
  #7  
Antiguo 05-05-2011
emii89 emii89 is offline
Miembro
 
Registrado: jul 2010
Posts: 18
Poder: 0
emii89 Va por buen camino
Cita:
Empezado por Caral Ver Mensaje
Hola
Yo creo que vas muy bien, claro que podras.
Ahora, una sugerencia, coloca la direccion del archivo .bat en el mismo exe (Application.ExeName).
Saludos
No entendí eso... a qué te referís? :O
Responder Con Cita
  #8  
Antiguo 05-05-2011
emii89 emii89 is offline
Miembro
 
Registrado: jul 2010
Posts: 18
Poder: 0
emii89 Va por buen camino
Cita:
procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.lines.add('shutdown /s /t '+edit1.text);
memo1.lines.SaveToFile('c:\apagar.bat');
WinExec(PChar('c:\apagar.bat'),SW_SHOWNORMAL);
memo1.lines.clear;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
memo1.lines.add('shutdown -a');
memo1.Lines.SaveToFile('c:\apagar.bat');
WinExec(PChar('c:\apagar.bat'),SW_SHOWNORMAL);
memo1.lines.clear;
end;
Ahora solo me falta eliminar el .bat y empezar a pulir bien el programita :P
Responder Con Cita
  #9  
Antiguo 05-05-2011
emii89 emii89 is offline
Miembro
 
Registrado: jul 2010
Posts: 18
Poder: 0
emii89 Va por buen camino
Código:
procedure TForm1.Button1Click(Sender: TObject);
begin
  memo1.lines.add('shutdown /s /t '+edit1.text);
  memo1.lines.SaveToFile('c:\apagar.bat');
  WinExec(PChar('c:\apagar.bat'),SW_SHOWNORMAL);
  sleep(250);
  DeleteFile(PChar('c:\apagar.bat'));
  memo1.lines.clear;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  memo1.lines.add('shutdown -a');
  memo1.Lines.SaveToFile('c:\apagar.bat');
  WinExec(PChar('c:\apagar.bat'),SW_SHOWNORMAL);
  sleep(250);
  DeleteFile(PChar('c:\apagar.bat'));
  memo1.lines.clear;
end;

Bat eliminado!

En un ratito posteo el programa listo!
Responder Con Cita
  #10  
Antiguo 05-05-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Bien, me alegro que lo hicieras solo.
Ahora: El archivo lo envias al directorio c:/, por eso indique que lo colocaras en el mismo directorio que el exe, osea el programa, asi:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
 memo1.lines.add('shutdown /s /t '+edit1.text);
 memo1.lines.SaveToFile(ExtractFilePath(Application.ExeName)+'apagar.bat');
 WinExec(PChar(ExtractFilePath(Application.ExeName)+'apagar.bat'),SW_SHOWNORMAL);
 memo1.lines.clear;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 memo1.lines.add('shutdown -a');
 memo1.Lines.SaveToFile(ExtractFilePath(Application.ExeName)+'apagar.bat');
 WinExec(PChar(ExtractFilePath(Application.ExeName)+'apagar.bat'),SW_SHOWNORMAL);
 memo1.lines.clear;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  DeleteFile(ExtractFilePath(Application.ExeName)+'apagar.bat');
  Showmessage('borrado');
end;
Saludos
__________________
Siempre Novato
Responder Con Cita
  #11  
Antiguo 05-05-2011
emii89 emii89 is offline
Miembro
 
Registrado: jul 2010
Posts: 18
Poder: 0
emii89 Va por buen camino
Cita:
Empezado por Caral Ver Mensaje
Hola
Bien, me alegro que lo hicieras solo.
Ahora: El archivo lo envias al directorio c:/, por eso indique que lo colocaras en el mismo directorio que el exe, osea el programa, asi:
Código Delphi [-]procedure TForm1.Button1Click(Sender: TObject); begin memo1.lines.add('shutdown /s /t '+edit1.text); memo1.lines.SaveToFile(ExtractFilePath(Application.ExeName)+'apagar.bat'); WinExec(PChar(ExtractFilePath(Application.ExeName)+'apagar.bat'),SW_SHOWNORMAL); memo1.lines.clear; end; procedure TForm1.Button2Click(Sender: TObject); begin memo1.lines.add('shutdown -a'); memo1.Lines.SaveToFile(ExtractFilePath(Application.ExeName)+'apagar.bat'); WinExec(PChar(ExtractFilePath(Application.ExeName)+'apagar.bat'),SW_SHOWNORMAL); memo1.lines.clear; end; procedure TForm1.Button3Click(Sender: TObject); begin DeleteFile(ExtractFilePath(Application.ExeName)+'apagar.bat'); Showmessage('borrado'); end;

Saludos
AAAA, muy bueno eso! así no tengo que poner ruta, excelente! gracias!
Responder Con Cita
  #12  
Antiguo 06-05-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Tambien podrías plantearte hacerlo por código, sin usar archivos bat.

Mira esto.

Saludos.
Responder Con Cita
  #13  
Antiguo 06-05-2011
emii89 emii89 is offline
Miembro
 
Registrado: jul 2010
Posts: 18
Poder: 0
emii89 Va por buen camino
Bien, está interesante... de todos modos quiero terminar el que estoy haciendo, pero evidentemente estoy fallando en algo.
Me tira un eConvertError... en la línea que voy a señalar... me ayudan a descubrir el error?.
Código:
implementation

{$R *.dfm}

Function TForm1.TransformaTiempo:Real;
Begin
  TransformaTiempo:=(StrToInt(EdHora.Text)*3600)+(StrToInt(EdMin.Text)*60)+(StrToInt(EdSeg.Text));
End;

procedure TForm1.BotApagarClick(Sender: TObject);
begin
  MemoBat.lines.add('shutdown /s /t '+FloatToStr(TransformaTiempo));
  MemoBat.lines.SaveToFile(ExtractFilePath(Application.ExeName)+'Apagar.Bat');
  WinExec(PChar(ExtractFilePath(Application.ExeName)+'Apagar.Bat'),SW_SHOWNORMAL);
  Sleep(250);
  DeleteFile(PChar('c:\apagar.bat'));
  MemoBat.lines.clear;
end;

procedure TForm1.BotCancelarClick(Sender: TObject);
begin
  MemoBat.lines.add('shutdown -a');
  MemoBat.Lines.SaveToFile('c:\apagar.bat');
  WinExec(PChar('c:\apagar.bat'),SW_SHOWNORMAL);
  Sleep(600);
  DeleteFile(PChar('c:\apagar.bat'));
  MemoBat.lines.clear;
end;

end.
Responder Con Cita
  #14  
Antiguo 06-05-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Creo que quieres que la funcion te calcule los segundos en horas, minutos, segundos.
Es asi?.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #15  
Antiguo 06-05-2011
emii89 emii89 is offline
Miembro
 
Registrado: jul 2010
Posts: 18
Poder: 0
emii89 Va por buen camino
Cita:
Empezado por Caral Ver Mensaje
Hola
Creo que quieres que la funcion te calcule los segundos en horas, minutos, segundos.
Es asi?.
Saludos
Exacto!! no se por que me tira el error ese.
Responder Con Cita
  #16  
Antiguo 06-05-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
INT = Integer.
REAL = Float.
Es simple, la funcion debe devolver un valor REAL (float), sin envargo contiene o trasforma los edits en INTEGER.
Analiza esto:
Código Delphi [-]

Function TForm1.TransformaTiempo:Real;
var h,m,s : Real;
Begin
  h:= StrToint(EdHora.Text);
  m:= StrToint(EdMin.Text);
  s:= StrToint(EdSeg.Text);
  TransformaTiempo:= h*3600 + m*60 + s;
End;

procedure TForm1.Button1Click(Sender: TObject);
begin
 MemoBat.lines.add('shutdown /s /t '+FloatToStr(TransformaTiempo));
 MemoBat.lines.SaveToFile(ExtractFilePath(Application.ExeName)+'apagar.bat');
 WinExec(PChar(ExtractFilePath(Application.ExeName)+'apagar.bat'),SW_SHOWNORMAL);
 MemoBat.lines.clear;
end;
Se generan tres variable REAL y se les pasa el valor de los edit, a la hora de hacer el calculo es mucho mas sencillo hacerlo ya que no se tiene que hacer ninguna transformacion.
Espero que lo asimiles, si no pregunta.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #17  
Antiguo 06-05-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Ahora, ya que no preguntas, pregunto yo:
Si hago esto:
Código Delphi [-]
Function TForm1.TransformaTiempo:Real;
var h,m,s : Real;
Begin
  h:= StrToint(EdHora.Text);
  m:= StrToint(EdMin.Text);
  s:= StrToint(EdSeg.Text);
  TransformaTiempo:= h*3600 + m*60 + s;
End;
Por que no hago esto ?:
Código Delphi [-]
Function TForm1.TransformaTiempo:Real;
var h,m,s : Integer;
Begin
  h:= StrToint(EdHora.Text);
  m:= StrToint(EdMin.Text);
  s:= StrToint(EdSeg.Text);
  TransformaTiempo:= h*3600 + m*60 + s;
End;
Varia en algo?.
Funcionan las dos?.
Por que?.

Saludos
__________________
Siempre Novato
Responder Con Cita
  #18  
Antiguo 06-05-2011
emii89 emii89 is offline
Miembro
 
Registrado: jul 2010
Posts: 18
Poder: 0
emii89 Va por buen camino
Cita:
Empezado por Caral Ver Mensaje
Hola
Ahora, ya que no preguntas, pregunto yo:
Si hago esto:
Código Delphi [-]Function TForm1.TransformaTiempo:Real; var h,m,s : Real; Begin h:= StrToint(EdHora.Text); m:= StrToint(EdMin.Text); s:= StrToint(EdSeg.Text); TransformaTiempo:= h*3600 + m*60 + s; End;

Por que no hago esto ?:
Código Delphi [-]Function TForm1.TransformaTiempo:Real; var h,m,s : Integer; Begin h:= StrToint(EdHora.Text); m:= StrToint(EdMin.Text); s:= StrToint(EdSeg.Text); TransformaTiempo:= h*3600 + m*60 + s; End;

Varia en algo?.
Funcionan las dos?.
Por que?.

Saludos
Solo cambiaste la definición de las variables?
Ninguna de las 2 la logro hacer funcionar, me sigue tirando el error en la misma línea de código!.

Como funcionar, deberían funcionar las 2, siempre y cuando los números que ingreses sean enteros.
Responder Con Cita
  #19  
Antiguo 06-05-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Las dos funcionan, la diferencia esta en que la primera DA la posivilidad de colocar decimales, cosa que no es correcta, en este caso.
El error es de conversion, no deberia darlo en ninguno de los dos casos.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #20  
Antiguo 06-05-2011
emii89 emii89 is offline
Miembro
 
Registrado: jul 2010
Posts: 18
Poder: 0
emii89 Va por buen camino
Cita:
Empezado por Caral Ver Mensaje
Hola
Las dos funcionan, la diferencia esta en que la primera DA la posivilidad de colocar decimales, cosa que no es correcta, en este caso.
El error es de conversion, no deberia darlo en ninguno de los dos casos.
Saludos
No debería, pero lo da... de hecho mirá lo que hice, para cambiar un poco:

Código:
Function TForm1.TransformaTiempo:Integer;
Var
  H,M,S:Integer;
Begin
  H:=StrToInt(EdHora.Text);
  M:=StrToInt(EdMin.Text);
  S:=StrToInt(EdSeg.Text);
  TransformaTiempo:=H*3600+M*60+S;
End;

procedure TForm1.BotApagarClick(Sender: TObject);
Var
  Tiempo:Integer;
begin
  Tiempo:=IntToStr(TransformaTiempo);
  MemoBat.lines.add('shutdown /s /t '+Tiempo);
  MemoBat.lines.SaveToFile(ExtractFilePath(Application.ExeName)+'Apagar.Bat');
  WinExec(PChar(ExtractFilePath(Application.ExeName)+'Apagar.Bat'),SW_SHOWNORMAL);
  Sleep(250);
  DeleteFile(PChar(ExtractFilePath(Application.ExeName)+'Apagar.Bat'));
  MemoBat.lines.clear;
end;

procedure TForm1.BotCancelarClick(Sender: TObject);
begin
  MemoBat.lines.add('shutdown -a');
  MemoBat.Lines.SaveToFile('c:\apagar.bat');
  WinExec(PChar('c:\apagar.bat'),SW_SHOWNORMAL);
  Sleep(600);
  DeleteFile(PChar(ExtractFilePath(Application.ExeName)+'Apagar.Bat'));
  MemoBat.lines.clear;
end;

procedure TForm1.Cerrar1Click(Sender: TObject);
begin
 Close;
end;
La línea que está en verde me dice que: [Error] Unit1.pas(57): Incompatible types: 'Integer' and 'String'
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como hacer un programa de chat ahkimpech Internet 8 27-08-2011 15:21:46
¿como se programa un API y que es un API? JXJ Varios 17 18-06-2010 01:53:30
Cómo se programa en Cobol David C++ Builder 8 12-09-2008 09:27:01
Como depurar un programa con delphi 7 kurono Varios 5 28-11-2007 09:01:26
Como meterle al firewall del xp un programa mierda API de Windows 18 14-12-2006 00:57:00


La franja horaria es GMT +2. Ahora son las 15:07:31.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi