Jump to content

Recommended Posts

Posted

Vamos lá limpar o pó do quadro! 😄

Lembrei-me que de vez em quando tenho a Hibernação desactivada pelo milagre de Santa Justa e mais o seu elevador em Lisboa... 🙂

Construí, então, este pequeno programa. É um bom esqueleto, muito completo, pronto a ser adaptado e expandido por cada um de vós. 😄

Sigam aí as vossas opiniões e sugestões! Adoraria ver, igualmente, propostas vossas de melhoramento do programa. 🙂

PROGRAM Shutdown;
USES crt, dos;

VAR Option : char; // Opções de operação
    Time : word;   // Tempo até encerrar

CONST Bool2OnOff : array[boolean] of string = ('ON', 'OFF');
      // Converte um Boolean num ON ou OFF


FUNCTION Word2String(const Number : word) : string;
(* Devolve um WORD numa STRING *)
begin
     str(Number, Word2String);
end;


PROCEDURE Configurate_Hibernate;
(* Configurar a Hibernação *)
var VSwitch : char;

   procedure CH(const Status : Boolean);
   (* Executa a escolha do utilizador - necessárias permissões de Administrador *)
   begin {CH}
        Exec('C:\WINDOWS\system32\cmd.exe', '/C powercfg -H ' + Bool2OnOff[status]);
   end;  {CH}

begin {Configurate_Hibernate}
     ClrScr;
     WriteLn('=== A CONTROLAR "HIBERNAR" ===');
     repeat
           WriteLn('1 - Activar');
           WriteLn('0 - Desactivar');
           VSwitch := ReadKey;
     until (Char(VSwitch) in ['0', '1']);
     CH(boolean(word(VSwicth)));
end;  {Configurate_Hibernate}


PROCEDURE Execute_Control(const Operation : string);
(* Executar controlo de energia *)
begin
     Exec('C:\WINDOWS\system32\cmd.exe', '/C shutdown /' + Operation);
end;


BEGIN  (* MAIN *)
     repeat
           ClrScr;
           WriteLn('====== SHUTDOWN CONTROL ======');
           Writeln('== CONFIGURACAO ==');
           WriteLn('1 - Hibernar');
           WriteLn('== CONTROLO ==');
           WriteLn('E - Encerrar');
           WriteLn('H - Hibernar');
           WriteLn('== PROGRAMA ==');
           WriteLn('ESC - Sair');

           repeat
                 Option := UpCase(ReadKey);
           until (Char(Option) in ['1', 'E', 'H', #27]);

           case Char(Option) of
                '1' : Configurate_Hibernate;
                'H' : Execute_Control('H');
                'E' : begin
                      repeat
                            Write('Tempo ate encerrar, em segundos (10-99): ');
                            ReadLn(Time);
                      until (Time in [10..99]);
                      Execute_Control('S /T ' + Word2String(Time) + ' /C "Em teste!"');

                      //PARA TESTES!
                      Delay(2000);
                      Exec('C:\WINDOWS\system32\cmd.exe', '/C shutdown /a');
                      end;
           end;

           if not (Option = #27) then begin
              WriteLn;
              Write('Pausa... ENTER para continuar...');
              repeat Option := ReadKey until (Option = #13);
           end;
     until (Option = #27);
END.

Cumprimentos,

thoga31

Knowledge is free!

Posted

hehehe sempre a dar-lhe Thoga!

Um dos primeiros programas que fiz em Delphi foi também um gestor para desligar o PC ao fim de x tempo. Onde será que anda isso?  😁

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Posted

Erro no procedimento Execute_Control corrigido.

hehehe sempre a dar-lhe Thoga!

Um dos primeiros programas que fiz em Delphi foi também um gestor para desligar o PC ao fim de x tempo. Onde será que anda isso?  😁

Sabes como é... 😄

O quadro tem estado a ganhar pó de novo, e lembrei-me de algo mais "potente", que até exige permissões de Admin para ser executado, para "desenpoeirar" isto aqui... 🙂

Vê lá se desencantas o teu programita, era muito fixe ver a tua versão! 😄

Ou então adapta o meu (ou faz de novo), no teu tempo livre, para ver se aprendo mais umas coisas contigo... 😁

Knowledge is free!

Posted

lol deixa-me arranjar um bocadito que vou ver se desencanto o velhinho... 🙂

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Posted

errr Não aprendes nada neste!

Fui encontrar a fonte e afinal na altura usei uma unit chamada shutdownunit.pas.

Não sei quem a terá feito nem onde a fui encontrar. Mas também já não a tenho.  🙂

Mas em Delphi há muitoas maneiras de encerrar/reiniciar o computador.

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Posted

Só vi agora que querias saber o controle de tempo, e não o encerrar em si! lol

Era com um TTimer. Lá está, há ali tudo!

Definia quantos minutos até encerrar, e ao activar, ele memorizava a hora actual.

Depois no ontimer testava se a hora actual era igual ou maior à hora memorizada + o tempo de encerramento.

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Posted

No meu eu utilizei a própria ferramenta da linha de comando de temporização e comentário.

Mas, de facto, posso realizá-lo dentro do programa, de forma mais personalizável e sem o limite dos 99 segundos (999 nos Windows Vista e 7, mas decidi deixar estar 99).

Knowledge is free!

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.