Тема: AHK: Будильник
По сути нужно создать подобие будильника - например при достижении времени в 12:00 запускается определенная программа.
Подскажите как реализовать проще и правильнее.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
По сути нужно создать подобие будильника - например при достижении времени в 12:00 запускается определенная программа.
Подскажите как реализовать проще и правильнее.
taskschd.msc /s без всякого AHK.
taskschd.msc /s без всякого AHK.
Ну если бы просто нужно было запустить программу, я бы не интересовался AutoHotkey. Остальные действия мне более-менее понятны. А вот как отследить такое событие как время, например 12:05 не знаю. Предположения есть, запустить цикл, проверять переменную с временем, но опять же я практически не знаю AHK. Хотелось бы совета как это делают или ссылку на рабочий пример.
Боюсь, что у меня будут какие-то бесконечные циклы, которые загрузят процессор под завязку.
ThrowSum, ознакомьтесь с этой темой, отредактируйте заголовок.
Поправил.
target_time = 1205 ; 12:05
target := A_YYYY A_MM A_DD target_time 00
if (target < A_Now)
EnvAdd, target, 1, d
EnvSub, target, %A_Now%, Seconds
Sleep, % target * 1000
msgbox Alarm!
Malcev, огромное спасибо за помощь, именно так я и представлял этот будильник, простой и без циклов.
Сначала все вообще устроило, но возникла проблема - я начал тестировать таймер и вижу, что срабатывает не всегда в 12:05 например, а иногда секундой позже. Вот здесь я затупил, подумал, что это из-за лагов каких, нагрузки компа, поставил -300мс на Sleep, тогда он начала срабатывать иногда на 12:04:59 с хвостиком. Подумал, что на большем отрезке будет и больше погрешность. Потом пришло в голову - задавая Sleep мы ведь не учитываем миллисекунды! То есть все зависит когда я запущу этот скрипт, отсюда и получается точность в +\- секунду.
Вот первое, что пришло в голову, это работает, но ужасно тупо решено. Пока A_MSec будет равно нулю проходят секунд 15, задержку Sleep меньше 10 вроде бессмысленно ставить. Ну и задача запустить таймер в 0 миллисекунд, когда они не будут влиять на точность срабатывания в секундах.
Как правильно это сделать?
while (A_MSec != 0)
{
Sleep, 10
}
target_time = 120500 ; 12:05
...
Можно для большей точности отнимать от sleep A_Msec, а как точнее не подскажу.
target_time = 1205 ; 12:05
target := A_YYYY A_MM A_DD target_time 00
if (target < A_Now)
EnvAdd, target, 1, d
EnvSub, target, %A_Now%, Seconds
Sleep, % target * 1000 - A_Msec
msgbox % A_Hour ":" A_Min ":" A_Sec ":" A_MSec
Ну если бы просто нужно было запустить программу, я бы не интересовался AutoHotkey.
Это не объясняет то, чем планировщик в данном случае не годится. Запускать оттуда сценарий/скрипт никто не мешает. Taskend грузится в трей по умолчанию. Зачем дополнительно нагружать трей ещё одним процессом?
Можно для большей точности отнимать от sleep A_Msec, а как точнее не подскажу.
Sleep, % target * 1000 - A_Msec
Спасибо, мне чуть позже та же мысль пришла. Хотя мне кажется здесь A_Msec будет брать текущий показатель милисекунд, а за время исполнения программы он немного измениться, так что точность будет меньше. Ну это чепуха конечно.
Зачем дополнительно нагружать трей ещё одним процессом?
Я хочу лучше разобраться в AHK на примерах, все таки он дает достаточно широкие возможности.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться