thoga31 Posted April 19, 2012 at 09:43 PM Report #450068 Posted April 19, 2012 at 09:43 PM 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!
thoga31 Posted April 20, 2012 at 02:13 PM Author Report #450186 Posted April 20, 2012 at 02:13 PM Programa melhorado com type casting. 🙂 Documento na Wiki Knowledge is free!
nunopicado Posted April 20, 2012 at 06:53 PM Report #450274 Posted April 20, 2012 at 06:53 PM 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.
thoga31 Posted April 20, 2012 at 08:41 PM Author Report #450292 Posted April 20, 2012 at 08:41 PM 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!
nunopicado Posted April 20, 2012 at 08:53 PM Report #450294 Posted April 20, 2012 at 08:53 PM 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.
thoga31 Posted April 20, 2012 at 08:55 PM Author Report #450296 Posted April 20, 2012 at 08:55 PM Lembras-te como fazias o controlo de tempo até encerrar? Era pelo comando na linha de comandos, ou com um delay no próprio programa? Knowledge is free!
nunopicado Posted April 20, 2012 at 09:17 PM Report #450304 Posted April 20, 2012 at 09:17 PM 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.
nunopicado Posted April 20, 2012 at 09:20 PM Report #450305 Posted April 20, 2012 at 09:20 PM 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.
thoga31 Posted April 20, 2012 at 09:24 PM Author Report #450308 Posted April 20, 2012 at 09:24 PM 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!
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now