1 (изменено: elektrovenik, 2013-05-01 15:00:42)

Тема: AHK: Таймер в скрипте.

Имеется задумка, сделать скрипт, осуществляющий возможность выполнения различных действий, при нажатии одной и той-же клавиши. При этом, в этом скрипте должен присутствовать "таймер возврата". Попытаюсь максимально понятно изложить идею на примерах :

Пример 1

1. нажата клавиша N 1й раз - выполняется действие №1
2. запустился таймер (для примера 5 секунд) - по истечении времени таймера, цикл должен вернуться в начало
3. прошло 3 секунды
4. нажата клавиша N 2й раз - выполняется действие №2

Время таймера не истекло, скрипт продолжил выполняться.

Пример 2:

1. нажата клавиша N 1й раз - выполняется действие №1
2. запустился таймер (для примера 5 секунд) - по истечении времени таймера, цикл должен вернуться в начало
3. прошло 7 секунд
4. нажата клавиша N 2й раз - выполняется действие №1

Время таймера истекло, произошел возврат в начало скрипта.

Вот до чего додумался я:
1. Выполнения различных действий, при нажатии одной и той-же клавиши - работает отлично.

Space::
    ++count
    if count = 1
        MsgBox Выполняется действие №1
    else if count = 2
        MsgBox Выполняется действие №2
    else if count = 3
        MsgBox Выполняется действие №3
    else {
        MsgBox пробел нажат более трёх раз, начинаем сначала
        count := 0
    }
    return

2. Выполнения различных действий, при нажатии одной и той-же клавиши + таймер возврата - не работает.

Space::
    ++count
    if count = 1
        gosub, 1
    else if count = 2
        gosub, 2
    else if count = 3
        gosub, 3
    else {
        MsgBox пробел нажат более трёх раз, начинаем сначала
        count := 0
    }
    return
    
1:
KeyWait, vk20, D5
if ErrorLevel
MsgBox Выполняется действие №1
else if ErrorLevel = 1
reload 
return

2:
KeyWait, vk20, D5
if ErrorLevel
MsgBox Выполняется действие №2
else if ErrorLevel = 1
reload 
return

3:
KeyWait, vk20, D5
if ErrorLevel
MsgBox Выполняется действие №3
else if ErrorLevel = 1
reload 
return

2

Re: AHK: Таймер в скрипте.

Вы не подумайте, что я придираюсь, но вы своё сообщение перечитывали? Вы считаете свой вопрос понятно сформулированным?

Имеется задумка, сделать скрипт с "таймером возврата"

Замечательно, а зачем? А почему с таймером?

Вот до чего додумался я, но увы не работает :

А что должно работать? А как оно должно работать?

3 (изменено: elektrovenik, 2013-05-01 14:59:39)

Re: AHK: Таймер в скрипте.

creature.ws пишет:

Вы не подумайте, что я придираюсь, но вы своё сообщение перечитывали? Вы считаете свой вопрос понятно сформулированным?

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

creature.ws пишет:

Замечательно, а зачем? А почему с таймером?

А потому что такая цель. Вопросы "а зачем?" "а почему?" вызывают у меня ощущение разговора с ребенком, простите ни в коем случае не пытаюсь Вас обидеть. Читая такие вопросы, я право теряюсь и не знаю как на них ответить. Сам факт необходимости для меня этой функции, не является основанием попробовать помочь мне?

creature.ws пишет:

А что должно работать? А как оно должно работать?

Интересно для чего-же я пример составлял...

4 (изменено: creature.ws, 2013-05-01 15:35:44)

Re: AHK: Таймер в скрипте.

Отредактировал сообщение

Да, теперь-то задача, стоящая перед вами, сформулирована предельно ясно. Помощь не заставит себя долго ждать.

5

Re: AHK: Таймер в скрипте.

creature.ws пишет:

Да, теперь-то задача, стоящая перед вами, сформулирована предельно ясно. Помощь не заставит себя долго ждать.

Хорошо, что на этот раз мне удалось лучше объяснить идею. Просто я всегда стремлюсь минимизировать колличество текста и громоздкость моих сообщений. Стоит отказаться от этого принципа?

6

Re: AHK: Таймер в скрипте.

Действительно как-то туманно.


Space::
    SetTimer Reset, -2000
    ++count
    if count = 1
        ToolTip Выполняется действие №1
    else if count = 2
        ToolTip Выполняется действие №2
    else if count = 3
        ToolTip Выполняется действие №3
    else {
        ToolTip пробел нажат более трёх раз, начинаем сначала
        count := 0
    }
    return
Reset:
    count := 0
    ToolTip
    return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

7

Re: AHK: Таймер в скрипте.

Если нужна именно привязка к времени, то наверное так:

StartTime := 0
Return 

N::
ElapsedTime := A_TickCount - StartTime
If ElapsedTime > 5000
    GoSub, Action1
Else    GoSub, Action2
StartTime := A_TickCount
Return


Action1:
Tooltip, Выполнено действие №1
Return


Action2:
Tooltip, Выполнено действие №2
Return

8

Re: AHK: Таймер в скрипте.

serzh82saratov БРАВО!! То что нужно, работает великолепно. И какое элегантное решение, привязать сброс (count := 0) к обратному таймеру. Сам бы низачто не додумался ((( Восхищен Вашей изобретательностью.

ypppu Ваш скрипт я увы не смог понять (в силу своих скудных знаний ahk) и потому просто проверил его на работоспособность - работает несколько неверно, при двойном нажатии N во второй стадии (когда выполняется действие №2) не происходит сброса действия, пока не истечет время таймера. Т.е если я буду нажимать клавишу N каждые 3 секунды, я никогда не смогу вернуться к действию №1.

9

Re: AHK: Таймер в скрипте.

Офф:

Если нужна именно привязка к времени, то наверное так:

Если по гринвичу то ещё так. Раз уж разговор про таймеры и время.

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

10

Re: AHK: Таймер в скрипте.

Да уж, мутное ТЗ, я не разгадал. Не стоило лишний раз упоминать про таймеры и секунды.