Ir para o conteúdo

Configuração e execução de controlos simples de energia

Este programa é um bom esqueleto, muito completo, pronto a ser adaptado e expandido por cada um de vós.

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.