Existe alguma maneira de ver quanto tempo resta antes de um desligamento programado no Windows 7?
Por desligamento agendado, quero dizer um desligamento (ou reinicialização) agendado usando o shutdown.exe
aplicativo de linha de comando , por exemplo:
shutdown /t 600 /s
Isso abriria uma caixa de mensagem informando que há 10 minutos até o desligamento e a hora real do desligamento do sistema.
Qualquer tempo superior a 600
segundos usa uma mensagem de balão.
Lembro-me vagamente do XP fornecendo um monitor de progresso da GUI, com uma contagem regressiva.
Como eles funcionaram? O tempo de desligamento restante ou o horário programado devem ser armazenados em algum lugar. Como posso acessá-lo?
Minha preferência é algum método através da linha de comando (ou seja, não GUI). Mais importante, isso é possível no Windows, ou seja, sem nenhum programa de terceiros?
Se isso não for possível com os utilitários padrão do Windows (e eu estou fazendo fronteira com o território Stack Overflow aqui), existe uma função de API do Windows (ou .NET, que pode até ser usada no PowerShell!)? Qualquer um deles seria preferido em relação a algum programa aleatório de terceiros.
/c <time>
).Respostas:
A pergunta foi interessante, então eu escrevi um lote que pode fazer um trabalho para você.
Basicamente, é temporizador de contagem regressiva, eu não incluí
shutdown
comando, mas o deixei como lição de casa. Os cálculos não são precisos, isso não se importa com anos bissextos, duração do mês, ... isso é principalmente para facilitar a leitura, pois eu queria facilitar a aprendizagem.Atualmente, existem dois arquivos trabalhando juntos, um inicia o cronômetro e outro, quando chamado, informa quanto tempo decorreu do início do cronômetro. Esses dois arquivos podem ser facilmente combinados em um script de cmd, dessa forma você também pode reutilizar algumas linhas ( como métodos definidos ).
Ok, vamos dar uma olhada nos scripts,
Aqui está
StartTimer.cmd
:De acordo com
FOR /F "skip=1 ...
:1. Peça
wmic
a hora e a data atuais.2. Pule a primeira linha de saída, que é o cabeçalho, por
skip=1
3. Leia os valores usando o
tokens=1-6
significado%%a-%%f
separado por Spaceor
TAB.4. Armazenar valores para as variáveis
%DateY%
, ...%TimeH%
,%TimeM%
...Depois disso, no início da linha
SET /A EPOCH=...
, usamos uma expressão que calcula os segundos decorridos1.1.1970
( este é o tempo aproximado simples, não o unix real. Consulte o Google se precisar ).Então, na última linha,
ECHO %EPOCH% > ...
escreve o tempo calculado no arquivo chamado "Timer.start.state
".E aqui
GetTimerValue.cmd
:Aqui o fluxo de código não é linear de cima para baixo. Primeiro,
GOTO CHECKFILE
rotulamos para que os comandos de execução realmente iniciem na linha que diz:CHECKFILE
. Muitas coisas aqui são exatamente as mesmas,StartTimer.cmd
então só explico linhas novas ou alteradas.Primeiro, verificamos se o arquivo de estado
Timer.start.state
existe; caso contrário, encerramos a mensagem de humor. Se o timer iniciar e os arquivos existirem, continuamos e fazemos algumas contas:1. Vá para o local
:TIMEOUT
onde produzimos os segundos decorridos. Você pode escolher uma etiqueta melhor para isso ...2.
SET /P %Timer% ...
lê a hora de início do arquivo e atribui valor à%Timer%
variável.3.
SET /A Elapsed ...
calcula segundos entre a hora de início e agora.4.
ECHO "Seconds ...
reproduz o valor calculado (segundos desde a inicialização do timer.Como obter tempo restante:
Você pode subtrair
%Elapsed%
de%MaxTime%
:OK, explicou o suficiente. Aqui está o script completo
Timer.cmd
:Neste ponto, esqueci tudo o que já foi dito. Esse arquivo em lotes aqui está funcionando por si próprio, portanto não há separadores
StartTimer.cmd
ouGetTimerValue.cmd
apenas issoTimer.cmd
. Basicamente, ainda é o mesmo, mas o fluxo de código é diferente e o uso também é completamente diferente. No entanto, isso não salva o estado no arquivo, assim você não pode mais obter o valor do timer após o logoff / reinicialização, se você precisar deste exemplo de uso acima para salvar / ler o estado no / do arquivo.O uso / ajuda para
Timer.cmd
é impresso quando executado sem argumentos. Eu não testei completamente isso e pode haver alguns erros de digitação etc., os argumentos não são verificados à prova de falhas.Integre com
shutdown
ou qualquer outro comando:Arquivo
poweroff.cmd
:Uso:
poweroff <wait_seconds>
para iniciar o desligamento programado eTimer get
obter o tempo decorrido / restante.fonte
StartTimer.cmd
deve ser chamado explicitamente. Escrevi um pequeno programa para resolver meu problema, que publicarei quando voltar ao meu computador.shutdown.exe
, que chamoushutdown_original.exe
. Ele verificaria o/t
sinalizador e, se existisse, criaria um arquivo com os horários de início e término salvos. Nos tempos de recuperação (/retrieve
sinalizador), ele verifica o log de eventos para ver se uma inicialização ou abortamento foi realizada desde o início do cronômetro. Não tenho certeza de como ele lidaria com hibernações. Não vou postar o código ou programa: é uma bagunça de buggy. E para que o programa funcionasse, tive que mexer bastante nas configurações de segurança, que não quero promover.shutdown.exe
chamada e registrar os horários em um arquivo, que foi o que você fez e por que estou aceitando isso.