1 (изменено: radioamator, 2019-01-28 01:22:28)

Тема: AHK: реакция скрипта на событие - изменение даты на часах компьютера

Здравствуйте, друзья.
У меня возник вопрос по возможностям autohotkey.

Может ли он реагировать на изменение даты.

Как сделать так, чтобы скрипт все время висел в трее, и как только на часах сменилась дата (то есть начались новые сутки в полночь) - выдавал бы в этот момент сообщение "Начались новый сутки" ?
А затем продолжал бы висеть в трее - ожидая нового начала суток и т.д.

2

Re: AHK: реакция скрипта на событие - изменение даты на часах компьютера

Здравствуйте.
Оформите название темы по правилам.

Проще организовать таймер в сценарии. На старте получаете текущее время из встроенных переменных A_. Умножая количество часов на 3600 прибавляете минуты умноженные на 60 и секунды, получаете количество прошедших секунд с начала ткущего дня. Затем, тем же способом вычисляете общее количество секунд в сутках, помещаете его в переменную и вычитаете из него полученный ранее результат. Результат нужно умножить на -1000, так как разрядность у таймера в миллисекундах и уже это значение поместить последним параметром в описании таймера. Потому как последнее значение получилось отрицательным, таймер выполнится один раз. Это нужно для того, чтобы следующий установить на запуск ровно через сутки с помощью вычисленного ранее значения, описав новый таймер в конце тела метки, которую он будет запускать.

Сообщение можно организовать так, или всплывающим из трея.

Будет отличной тренировкой для освоения базовых механизмов.

3

Re: AHK: реакция скрипта на событие - изменение даты на часах компьютера

KusochekDobra пишет:

Это нужно для того, чтобы следующий установить на запуск ровно через сутки с помощью вычисленного ранее значения

Вычислять ничего не надо.
Мне нужно просто один раз свериться с временем на часах компьютера.

Вопрос - как заставить скрипт AHK реагировать - на ИЗМЕНЕНИЕ ДАТЫ на часах компьютера ?
Иными словами - скрипт висит в трее, вообще ничего не делает, ничего не вычисляет и не перемножает - и ждет одного-единственного события - изменения даты на часах компьютера.
Когда изменение даты произошло - то скрипт выдает сообщение.

Вот в чем был вопрос.

4

Re: AHK: реакция скрипта на событие - изменение даты на часах компьютера

Такого события, насколько я знаю, нет. Можно просто периодически проверять текущее время.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: реакция скрипта на событие - изменение даты на часах компьютера

teadrinker пишет:

Можно просто периодически проверять текущее время

Вот мне это и надо - раз в 10 минут проверять время.
Если дата изменилась - то появление Msgbox.

6

Re: AHK: реакция скрипта на событие - изменение даты на часах компьютера

teadrinker пишет:

Можно просто периодически проверять текущее время.

А скриптом это сделать как ?

7

Re: AHK: реакция скрипта на событие - изменение даты на часах компьютера

http://forum.script-coding.com/viewtopi … 68#p104068

Times := ["00:00"] 
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

8

Re: AHK: реакция скрипта на событие - изменение даты на часах компьютера

serzh82saratov, По указанной ссылке - я нашел скрипт:


#SingleInstance Force
#NoEnv

Times := ["01:00","00:59:50"] 
NewTimer(Times)
Return

NewTimer(Arr)  {
	For k, value in Arr
		odds := DifferenceTime(value)
		, (!Min || Min > odds) 
		&& (Min := odds, Time := value) 
	hFunc := Func("Timer").Bind(Time, Arr)
	SetTimer, % hFunc, % -Min
	TrayTip, % "Следующий в:", % "`n" Time "`n`nЧерез:`n`n" FormatTime(Min) 
}

Timer(Time, List)  {
	MsgBox, , , % Time, 1
	NewTimer(List)
}

DifferenceTime(Time)  {
	T := StrSplit(Time, ":")
    Time := Time2 := A_YYYY A_MM A_DD T[1] T[2] (T[3] ? T[3] : "00")
    EnvSub, Time, A_Now, Second
    Time := (Time * 1000) - A_MSec
    If Time >= 0
        Return Time
    Time2 += 1, days
    EnvSub, Time2, A_Now, Second
    Return (Time2 * 1000) - A_MSec
}

FormatTime(Time)  {
	Rest := Mod(Time, 3600000)
	Hours := Format("{:02}", Time // 3600000)
	Min := Format("{:02}", Rest // 60000)
	Sec := Format("{:02}", Mod(Rest, 60000) // 1000)
	MSec := Format("{:03}", Mod(Rest, 1000)) 
	Return Hours ":" Min ":" Sec "," MSec
}

А как его запустить-то ?
Я щелкаю по скрипту - ничего не происходит.
И в трее ничего не появляется.

9

Re: AHK: реакция скрипта на событие - изменение даты на часах компьютера

loop
{
   sleep ((24-A_Hour)*60*60 - A_Min*60 - A_Sec)*1000
   msgbox new day
}

10

Re: AHK: реакция скрипта на событие - изменение даты на часах компьютера

Malcev, а в вашем коде - как время установить ?

Допустим нужно в 1:30, чтобы таймер сработал.
(У вас в коде я вижу только число 24 - это видимо количество часов.)

11

Re: AHK: реакция скрипта на событие - изменение даты на часах компьютера

У вас вопрос какой был?

radioamator пишет:

Как сделать так, чтобы скрипт все время висел в трее, и как только на часах сменилась дата (то есть начались новые сутки в полночь) - выдавал бы в этот момент сообщение "Начались новый сутки" ?

Так что - додумывайте сами.

12

Re: AHK: реакция скрипта на событие - изменение даты на часах компьютера

Malcev, ясно.
Все вроде работает.
Спасибо за ответ.

13

Re: AHK: реакция скрипта на событие - изменение даты на часах компьютера

radioamator пишет:

Я щелкаю по скрипту - ничего не происходит.

Да, там #Persistent не хватало, я поправил код по ссылке.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

14 (изменено: stealzy, 2019-01-28 17:30:46)

Re: AHK: реакция скрипта на событие - изменение даты на часах компьютера

radioamator, а зачем Autohotkey для этого?
Запускаете планировщик задач из меню системные утилиты. Или Win+R - taskschd.msc.
Создаете новую задачу - ежедневно, в 00:00, выводит сообщение, ок.
И в трее ничего не висит.