1

Тема: AHK: Пауза скрипта по системному времени

Доброго дня всем! Как настроить паузу скрипта по системному времени? Сам скрипт циклический. Цикл выполняется через определенный промежуток времени, настроенный через команду Sleep. Мне нужно, чтобы скрипт остановился в определенное время, причем, если вдруг, в это определенное время еще исполняется основной код (скрипт не ждет тайминга команды Sleep) - чтобы остановка произошла сражу же после выполнения основного кода.

2

Re: AHK: Пауза скрипта по системному времени

Узнавайте системное время перед выполнением основного кода. Если определенное время уже наступило, то ставите паузу.

Win7x64, AutoHotkey 1.1.30.00

3

Re: AHK: Пауза скрипта по системному времени

vitek19841210
Встроенные переменные, отвечающие за время: A_Hour, A_Min, A_Sec
Сделать проверку не составит труда я полагаю?

Win10x64, AHK v1.1.30.03

4

Re: AHK: Пауза скрипта по системному времени

Друзья, спасибо за ответы. В теории, как это будет работать, я понял. Но навыков программирования недостаточно, чтобы самостоятельно написать код. Обычно просто ищу уже готовые варианты через поисковые системы, и вставляю в свои скрипты. В этот раз найти ничего не удалось. Поэтому написал на этот форум. Если не затруднит, хотелось бы увидеть готовый код.

5

Re: AHK: Пауза скрипта по системному времени

vitek19841210
Таким макаром далеко не уйти. Если тупо всё копировать, то наверняка будут косяки с одинаковыми именами переменных, меток перехода и прочее.
Если нет желания учиться - лучше это забросить сразу.

Win10x64, AHK v1.1.30.03

6

Re: AHK: Пауза скрипта по системному времени

__Михаил__ пишет:

Если нет желания учиться - лучше это забросить сразу.

Почему же, есть коммерческий раздел, где, думаю, за 20-30 евро напишут.

7

Re: AHK: Пауза скрипта по системному времени

Malcev

За подобный, простой код? Уж больно дорого. Максимальная цена ~100 Руб.

Win10x64, AHK v1.1.30.03

8

Re: AHK: Пауза скрипта по системному времени

__Михаил__, бросьте, какие 100 руб, копеек 50 красная цена. Или даже 30.

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

9

Re: AHK: Пауза скрипта по системному времени

__Михаил__, ну тут каждый вправе по-своему оценивать своё время.
Лично я считаю количество потраченных часов*стоимость часа работы, но минимально не менее определенного количества часов (занимаюсь непрограммированием).

10

Re: AHK: Пауза скрипта по системному времени

vitek19841210

F2 - кнопка запуска.
TimeWait - время ожидания перед очередной проверкой.
TimeOut - время (час:мин).


F2::
TimeWait := 1000*	60			; Время между проверкой времени (раз в минуту).
TimeOut = 21:27					; Время срабатывания.
SetTimer, Alarm, %TimeWait%		; Запускаем таймер.
Return


Alarm:
T := % A_Hour . ":" . A_Min
If (T >= TimeOut)
{
 SetTimer, Alarm, Off			; Вырубаем таймер.
 MsgBox,8256, Время наступило: %T%, Таймер сработал!
}
Return
Win10x64, AHK v1.1.30.03

11

Re: AHK: Пауза скрипта по системному времени

teadrinker

Будет интересно посмотреть на Ваш, возможно более элегантный код...

Win10x64, AHK v1.1.30.03

12

Re: AHK: Пауза скрипта по системному времени

Погодите, а разве ваш код справляется с задачей?

vitek19841210 пишет:

если вдруг, в это определенное время еще исполняется основной код (скрипт не ждет тайминга команды Sleep) - чтобы остановка произошла сражу же после выполнения основного кода

Тут должна ещё обрабатываться ситуация, когда таймер срабатывает во время какого-то циклического действия, и он должен ждать его завершения.

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

13

Re: AHK: Пауза скрипта по системному времени

teadrinker
Основная моя задача была показать реализацию срабатывания участка кода строго по времени.
Это лишь пример, без учёта остальных условий.

Win10x64, AHK v1.1.30.03

14 (изменено: teadrinker, 2020-06-26 23:04:56)

Re: AHK: Пауза скрипта по системному времени

Если нужно просто засечь определённое время, не обязательно проверять время каждую минуту. Достаточно поставить таймер на разницу в милисекундах между нужным временем, и текущим:

#Persistent
alarmTime = 22:00

now := A_Now
alarmTime := SubStr(now, 1, 8) . Format("{:04}00", StrReplace(alarmTime, ":"))
alarmTime -= now, s
if (alarmTime < 0)
   alarmTime := 86400 + alarmTime
SetTimer, Alarm, % alarmTime * 1000
Return

Alarm:
   MsgBox, Alarm!
   ExitApp
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

15 (изменено: __Михаил__, 2020-06-26 23:39:09)

Re: AHK: Пауза скрипта по системному времени

teadrinker
Вооот, вот именно умного подхода мы все и ждём)

Понятно сразу, что правильно высчитать нужное время и затем уже ждать столько времени.
Почему я не стал этого делать? Быстро на ум пришла простая идея сверки текущего времени по таймеру, который можно настроить как угодно.
Более сложного решения искать уже не стал.

С 'SubStr' не знаком, а с 'Format' имел дело лишь копируя чужой код.

Было бы очень интересно получить комментарии к строкам Вашего кода, точнее только этой строки:

alarmTime := SubStr(now, 1, 8) . Format("{:04}00", StrReplace(alarmTime, ":"))
Win10x64, AHK v1.1.30.03

16 (изменено: EV, 2020-06-27 00:14:51)

Re: AHK: Пауза скрипта по системному времени

SetTimer minuteDisplay, 60000
minuteDisplay:
msgbox current minutes: %A_Min%

17

Re: AHK: Пауза скрипта по системному времени

__Михаил__ пишет:

С 'SubStr' не знаком

Так а почему бы не познакомиться? Документация в свободном доступе. В данном случае мы берём символы с первого по восьмой из значения переменной A_Now, т. е. год, месяц и число. Далее командой Format форматируем заданное время на случай, если оно задано в виде 9:00 — просто добавляем нули до четырёх знаков. В принципе этот шаг можно было пропустить, если есть уверенность, что время задано в виде 09:00, и просто написать

alarmTime := SubStr(now, 1, 8) . StrReplace(alarmTime, ":") . "00"
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

18

Re: AHK: Пауза скрипта по системному времени

В общем понял я, что задача здесь не совсем тривиальная. Я нашел для себя более простой способ: по нужному мне времени в планировщике задач запускается файл, который убивает процесс с AHK, затем запускается другой AHK файл, где прописана часть кода от "убитого" файла без цикла. Поэтому, если даже планировщик "убьет" скрипт при выполнении части кода, пока скрипт не ждет команды sleep, второй файл завершит прерванную работу.
Спасибо всем, кто хотел помочь.
P.S. конкретно в моем случае не критично, если часть кода скрипта после прерывания работы будет повторно выполнена. Самое главное, чтобы код был выполнен полностью, потому что в конце кода выполняется действие, которое даёт возможность выполняться корректно циклу после ожидания команды sleep. В ином случае, первый цикл будет сделан "вхолостую". Как-то так