Bom dia, queria saber como posso fazer o meu script mostrar uma contagem regressiva em dias no MsgBox, começando do 3 e indo até o 1.
Por exemplo: Se eu abro o meu script hoje, ele deverá mostrar o seguinte no MsgBox: "dia 3", no dia seguinte, ele deverá mostrar: "dia 2" e no terceiro: "dia 1"
É possível? Não precisa usar data online, pode ser algum comando do windows mesmo.
contagem regressiva em dias Topic is solved
Moderator: Gio
Re: contagem regressiva em dias Topic is solved
Bom dia Lazyyy.
Sua pergunta tem várias respostas possíveis. Para apresentar uma proposta de solução, vou dividir a resposta em duas partes: Primeiro vamos entender como as datas e horas podem ser calculadas no AutoHotkey e depois seguimos para a outra parte.
Quando uma data está no formato AAAAMMDDhhmmss (YYYYMMDDHH24MISS em inglês) você pode utilizar o comando EnvAdd para somar ou subtrair dias, meses, anos ou qualquer outra porção de tempo dela.
AAAA é o ano com quatro dígitos
MM é o mês com dois dígitos (incluindo o zero se for menor que 10)
DD é o dia com dois dígitos (incluindo o zero se for menor que 10)
hh é a hora com dois dígitos e no formato de 24 horas (incluindo o zero se for menor que 10)
mm são os minutos com dois dígitos (incluindo o zero se for menor que 10)
ss são os segundos com dois dígitos (incluindo o zero se for menor que 10)
Exemplo: 20200603093315 é equivalente a: 03/06/2020 às 09:33:15.
Exemplo do EnvAdd subtraindo um dia da data da execução do script e exibindo o resultado por três vezes:
Além disso, pode também usar o comando EnvSub para subtrair uma data da outra.
Agora vamos para a outra parte da pergunta: Como o script poderia criar uma âncora de data entre as execuções (ou seja, saber que na execução de hoje deve diminuir 1 em relação a de ontem).
Os programas rodam no computador em memória volátil (memória RAM). Isso significa que quando termina a execução de um programa, tudo o que ele tinha nas suas variáveis simplesmente some. Mas o programa pode a qualquer momento da sua execução salvar informações na memória NÃO-volátil do computador: O disco rígido (ou HD). Para fazer isso, basta escrever um arquivo. Você pode escrever um arquivo de texto usando vários comandos, sendo que o mais direto é o FileAppend.
Sendo assim, para fazer o que você quer, o script teria que:
1. Na primeira execução, criar um arquivo com a data atual (preferêncialmente no formato AAAAMMDDhhmmss (YYYYMMDDHH24MISS em inglês). Você pode saber que é a primeira execução verificando que o arquivo não existe ainda (use a função FileExist() para isso).
2. Nas próximas execuções, o script vai simplesmente diminuir a data salva no arquivo da data da execução (obtida colocando em uma variável sua o conteúdo da variável embutida A_now), encontrando a diferença em dias através do comando EnvSub.
3. Depois, é só exibir a expressão literal "dia " seguida do resultado de "3 menos a diferença encontrada" em uma Msgbox.
Exemplo:
DICA: Datas no formato AAAAMMDDhhmmss (YYYYMMDDHH24MISS em inglês) também são muito úteis em comparações de datas, pois uma data anterior sempre é um número menor que o de uma data posterior quando ambas estão neste formato.
Espero ter ajudado, se ainda tiver alguma dúvida sobre essa questão, basta postar abaixo
Sua pergunta tem várias respostas possíveis. Para apresentar uma proposta de solução, vou dividir a resposta em duas partes: Primeiro vamos entender como as datas e horas podem ser calculadas no AutoHotkey e depois seguimos para a outra parte.
Quando uma data está no formato AAAAMMDDhhmmss (YYYYMMDDHH24MISS em inglês) você pode utilizar o comando EnvAdd para somar ou subtrair dias, meses, anos ou qualquer outra porção de tempo dela.
AAAA é o ano com quatro dígitos
MM é o mês com dois dígitos (incluindo o zero se for menor que 10)
DD é o dia com dois dígitos (incluindo o zero se for menor que 10)
hh é a hora com dois dígitos e no formato de 24 horas (incluindo o zero se for menor que 10)
mm são os minutos com dois dígitos (incluindo o zero se for menor que 10)
ss são os segundos com dois dígitos (incluindo o zero se for menor que 10)
Exemplo: 20200603093315 é equivalente a: 03/06/2020 às 09:33:15.
Exemplo do EnvAdd subtraindo um dia da data da execução do script e exibindo o resultado por três vezes:
Code: Select all
VAR := A_Now ; A variável embutida A_Now retorna a data e hora do momento da execução no formato AAAAMMDDhhmmss
DATA_FORMATADA := SubStr(VAR, 7, 2) . "/" . SubStr(VAR, 5, 2) . "/" . SubStr(VAR, 1, 4)
msgbox, 0, Bom dia, Hoje é %DATA_FORMATADA%
EnvAdd, VAR, -1, d
DATA_FORMATADA := SubStr(VAR, 7, 2) . "/" . SubStr(VAR, 5, 2) . "/" . SubStr(VAR, 1, 4)
msgbox, 0, Bom dia, Ontem foi %DATA_FORMATADA%
EnvAdd, VAR, -1, d
DATA_FORMATADA := SubStr(VAR, 7, 2) . "/" . SubStr(VAR, 5, 2) . "/" . SubStr(VAR, 1, 4)
msgbox, 0, Bom dia, e ANTEONTEM foi %DATA_FORMATADA%
Além disso, pode também usar o comando EnvSub para subtrair uma data da outra.
Code: Select all
HOJE := A_Now ; A_Now contém a data e a hora da execução no formato AAAAMMDDhhmmss (YYYYMMDDHH24MISS em inglês)
ONTEM := "20200602"
EnvSub, HOJE, %ONTEM%, days ; A variável HOJE foi transformada aqui, então ela não conterá mais a informação da data de hoje (e sim a diferença)
msgbox , 0, Bom dia, Entre as datas HOJE e ONTEM existe uma diferença de %HOJE% dias.
HOJE := A_Now ; Reescrevemos a variável HOJE com a data de hoje.
ANTEONTEM := "20200601"
EnvSub, HOJE, %ANTEONTEM%, days ; A variável HOJE foi transformada aqui, então ela não conterá mais a informação da data de hoje (e sim a diferença)
msgbox , 0, Bom dia, Entre as datas HOJE e ANTEONTEM existe uma diferença de %HOJE% dias.
Agora vamos para a outra parte da pergunta: Como o script poderia criar uma âncora de data entre as execuções (ou seja, saber que na execução de hoje deve diminuir 1 em relação a de ontem).
Os programas rodam no computador em memória volátil (memória RAM). Isso significa que quando termina a execução de um programa, tudo o que ele tinha nas suas variáveis simplesmente some. Mas o programa pode a qualquer momento da sua execução salvar informações na memória NÃO-volátil do computador: O disco rígido (ou HD). Para fazer isso, basta escrever um arquivo. Você pode escrever um arquivo de texto usando vários comandos, sendo que o mais direto é o FileAppend.
Sendo assim, para fazer o que você quer, o script teria que:
1. Na primeira execução, criar um arquivo com a data atual (preferêncialmente no formato AAAAMMDDhhmmss (YYYYMMDDHH24MISS em inglês). Você pode saber que é a primeira execução verificando que o arquivo não existe ainda (use a função FileExist() para isso).
2. Nas próximas execuções, o script vai simplesmente diminuir a data salva no arquivo da data da execução (obtida colocando em uma variável sua o conteúdo da variável embutida A_now), encontrando a diferença em dias através do comando EnvSub.
3. Depois, é só exibir a expressão literal "dia " seguida do resultado de "3 menos a diferença encontrada" em uma Msgbox.
Exemplo:
Code: Select all
If (FileExist(A_ScriptDir . "/DATA_PRIMEIRA.hini"))
{
FileRead, CONTEUDO_DO_ARQUIVO, %A_ScriptDir%/DATA_PRIMEIRA.hini
DATA_ATUAL := A_now
EnvSub, DATA_ATUAL, %CONTEUDO_DO_ARQUIVO%, days ; Neste comando, DATA_ATUAL é retrabalhada, portanto ela deixa de conter de fato a data da execução e passa a conter apenas a diferença.
msgbox % "dia " . 3 - DATA_ATUAL
}
else
{
FileAppend, %A_now%, %A_ScriptDir%/DATA_PRIMEIRA.hini
msgbox % "dia 3"
}
DICA: Datas no formato AAAAMMDDhhmmss (YYYYMMDDHH24MISS em inglês) também são muito úteis em comparações de datas, pois uma data anterior sempre é um número menor que o de uma data posterior quando ambas estão neste formato.
Espero ter ajudado, se ainda tiver alguma dúvida sobre essa questão, basta postar abaixo
"What is suitable automation? Whatever saves your day for the greater matters."
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
Return to “Ajuda e Suporte Geral”
Who is online
Users browsing this forum: No registered users and 28 guests