1 (изменено: HASBULAT, 2018-04-10 02:41:37)

Тема: Как настроить время ?

Всем привет. Ребята, помогите доделать скрипт. Он  при нажатии на "a" нажимает по очереди то "2" то "3". Но как сделать так, что если допустим прошло 5 секунд, и если нажать на "а", то надо чтобы он начинался опять с двойки? Т.е. если нажимать на "а" постоянно (перерыв не более 5 секунд), то пусть чередуются 2 и 3, но если прошло более 5 секунд, то надо чтобы он стартовал опять с 2ки

+ открыть спойлер

~a::
lbutton_count++   
If (lbutton_count > 2)
{
lbutton_count := 1
}
Send % 4 - lbutton_count
Return

2

Re: Как настроить время ?

Есть соображения ?

3 (изменено: svoboden, 2018-04-10 05:44:39)

Re: Как настроить время ?

Сбрасывайте счетчик, когда пройдет 5 сек.

4

Re: Как настроить время ?

svoboden, это скрипт не мой, я не умею писать их. Помогите доделать часть со временем плиз.

5

Re: Как настроить время ?

Используйте таймер.

6

Re: Как настроить время ?

svoboden пишет:

Используйте таймер.

дык говорю, я не понимаю в этом вообще, таймер могу включить только на телефоне. Не думаю что это поможет
Если не сложно и не много писать, допишите пожалуйста скриптик, как сделать чтобы после 5 секунд после нажатии на "а" начиналось бы с 2ки.

7 (изменено: svoboden, 2018-04-12 06:22:25)

Re: Как настроить время ?

Мне это так нужно, писать полный пример. Т.е. - это не цель данного форума. К тому же я не понимаю ваш пример.
Суть на самом деле простая: таймер практически всегда сбрасывается на начало, если нажать горячую клавишу повторно.

vk41:: ; a
SetTimer, t, 5000
Send % (t:=!t) ? "2" : "3"
return

t:
t := ""
return

8

Re: Как настроить время ?

svoboden пишет:

Мне это так нужно, писать полный пример.


Будет тебе. На то он и форум чтобы помогать, а зачем он тогда ? Куда ещё обратиться за помощью ? Просто для тебя это пару секунд написать, а для меня непостижимо.
Всё равно, огромное спасибо, потому, что он работает как надо. Чередуются 2 и 3, а после 5 секунд опять с двойки начинается. Всё правильно понял!

9 (изменено: HASBULAT, 2018-04-14 00:56:01)

Re: Как настроить время ?

svoboden Друг, если не сложно и не много переписывать скрипт, его можно чуток переделать ? Всё так-же только надо так, чтобы при нажатии на "а" нажималась "2", но если прошло времени менее 5 секунд - то нажималась бы поочерёдно "2" и "3". Как бы если нажимать "а" редко (более 5 секунд) - то "2". Менее 5ти - "2" и "3". Спасибо!

10 (изменено: svoboden, 2018-04-14 08:33:39)

Re: Как настроить время ?

А что не так с примером выше?

11 (изменено: HASBULAT, 2018-04-14 21:57:15)

Re: Как настроить время ?

svoboden Ой, это он и есть. Всё так. Немного время уменьшил и теперь то что надо.

12 (изменено: HASBULAT, 2018-04-15 16:56:56)

Re: Как настроить время ?

svoboden Привет. А можно ли вставить такое условие в твой пример: Всё как есть, но добавить что если нажата клавиша B то отсчёт тоже начинался бы от неё.
Например. Нажал А, нажалось 2, нажал ещ раз в течении менее 5 секунд - нажимается 3 и так по очереди. Но, если прошло время более 5 секунд, любое, допустим 30 секунд, и если нажать B, то надо чтобы при нажатии на А он продожил чередование, т.е. нажалась бы 3. В остальном как в скрипте.

13 (изменено: svoboden, 2018-04-15 18:32:29)

Re: Как настроить время ?

vk41:: ; a
SetTimer, t, 5000
Send % (t:=!t) ? "2" : "3"
return

t:
t := 0
return

vk42:: ; b
t := 1
return

14

Re: Как настроить время ?

svoboden У меня получается так, что после нажатия на B всё время 3. Не чередуется. Попробовал t=0 - всё время 2.

15

Re: Как настроить время ?

Ну так нажимайте "b", а по клавиши "a" цифры будет чередоваться как прежде.

16

Re: Как настроить время ?

svoboden пишет:

Ну так нажимайте "b", а по клавиши "a" цифры будет чередоваться как прежде.

Я наверно плохо объяснил. Надо чтобы после нажатия на B счётчик обнулялся, так же как и при нажатии на А

17 (изменено: HASBULAT, 2018-04-24 03:54:14)

Re: Как настроить время ?

svoboden пишет:

а по клавиши "a" цифры будет чередоваться как прежде.

Я плохо объясняю. По кнопке А идёт чередование 2 и 3 при условии что время нажатия менее 5 секунд. Тут всё работает как часики.
А можно ли вставить такую вводную: если нажимаются определённые клавиши, возьмём B или C или D и допустим поочерёдно с А (независимо от того когда нажимаются BCD), то надо чтобы после нажатия этих определённых клавиш, а затем и А - чередование 2 и 3 продолжалось. Сейчас же если нажимать поочерёдно B и A, то постоянно при нажатии на А - цифра 3. А надо чтобы они менялись.

18

Re: Как настроить время ?

На те:

k := 1

vk41::
SetTimer, t, 2000
k += 1
send % k
if k = 3
k := 1
return

t:
k := 1
return

vk42::
if k = 3
k := 1
return

Настраивайте счетчики (время), как хотите.

19 (изменено: HASBULAT, 2018-04-24 18:43:25)

Re: Как настроить время ?

svoboden пишет:

На те:

+ открыть спойлер
k := 1

vk41::
SetTimer, t, 2000
k += 1
send % k
if k = 3
k := 1
return

t:
k := 1
return

vk42::
if k = 3
k := 1
return

Настраивайте счетчики (время), как хотите.

Для удобства поставил SetTimer, t, 500, но ...
Нет, не получается. Если нажимать поочерёдно B и A (допустим так: B A B A B A B A B A B A) с задержкой более 500 мс, то никакого чередования нет. Постоянно 2222222.
После нажатия на B надо остановить таймер, чтобы если нажать на А в любое время, чередование не прекращалось и наоборот если только нажимать на А - таймер работал. Я вставил так ( не знаю правильно ли)
........
vk42::
SetTimer, t, off
if k = 3
k := 1
return
.......
А вот как заставить чередоваться 2 и 3 при нажатии поочерёдно B и A за пределами 500мс ? Ведь после 500мс К сбрасывается на 1 и получается нажимается вечная 2.

20 (изменено: svoboden, 2018-04-25 02:27:18)

Re: Как настроить время ?

           #Usehook

            k := 1

            vk41::
	        wer := true
            SetTimer, t, 2000
	        k += 1
            send % k
            if k = 3
	        k := 1
            return

	        t:
            k := 1
            qwe := true
            wer := false
            return

            #if wer
            vk42::
            if k = 3
            k := 1
            return
	        #if

            #if qwe
	        vk42::
            if k = 1
            k := 2
	        return
            #if

21 (изменено: HASBULAT, 2018-04-24 23:16:29)

Re: Как настроить время ?

svoboden Ну так же как в прошлом скрипте. Чередуются по нажатию на А без проблем 2 и 3 в промежутке времени 500 (я поставил меньше). А вот если нажимать на B и A поочерёдно с интервалом более 500 - всегда 2. Это даже видно (ты классно вывел цифры чтобы видеть). После нажатия на B после 500 мс сбрасывается на 1. А очень хотелось бы чтобы после нажатия на B таймер останавливался, и возобновлялся лишь по нажатию на А. Думаю в таймере проблема. Я сам целый день потратил, но впустую. Знаний не хватает.

Хотелось бы так:
Между нажатиями интервал любой, рандомный, независимо от таймера, хоть 100 мс, хоть 3 минуты.
Нажатия:
B A B A B A B A B A B A B A B A ........
Результат:
2 3 2 3 2 3 2 3 2 3 2 3 2 3 2 3 ..........

Такой же результат надо и при нажатии на А в интервале (допустим) до 1000 мс. (но с этим нет проблем, это работает с первой версии скрипта)

22 (изменено: svoboden, 2018-04-24 23:36:04)

Re: Как настроить время ?

HASBULAT, у меня все работает. По нажатию на "B" счетчик таймера сбрасывается.

23 (изменено: HASBULAT, 2018-04-24 23:32:12)

Re: Как настроить время ?

svoboden пишет:

у меня все работает. По нажатию на "B", счетчик таймера сбрасывается.

Странно, но у меня нет. Я скопировал всё как есть , запустил.
Долблю на А с интервалом менее 500 мс (поменял), всё здорово - 2 3 2 3 2 3, если более 500 мс - 2 2 2 2 2 тут нет проблем.
Вторая часть.
Нажимаю пару раз на А с интервалом более 500 мс - всё нормально 2 2 2 2 , теперь нажимаю поочерёдно B и A с более 500 мс - сплошные двойки, не чередуется.

ЗЫ. А как ты делал чтобы отображалась переменная К ? Для редактирования удобно было.

24 (изменено: svoboden, 2018-04-24 23:35:27)

Re: Как настроить время ?

HASBULAT пишет:

теперь нажимаю поочерёдно B и A с более 500 мс - сплошные двойки, не чередуется.

Так последней кнопкой у вас идет "A", значит, после 500 мс таймер снова сбрасывает на "1". Получается, вы хотите отключить еще таймер на "B"? Тогда какой смысл его было включать?

25 (изменено: HASBULAT, 2018-04-24 23:51:28)

Re: Как настроить время ?

svoboden пишет:

Получается, вы хотите отключить еще таймер на "B"?

Ну да. Я выше писал, про это. Просто видать объяснять не умею.

26 (изменено: HASBULAT, 2018-04-24 23:50:39)

Re: Как настроить время ?

svoboden пишет:

Получается, вы хотите отключить еще таймер на "B"?

Просто в одной программе надо так, чтобы при нажатии на А с интервалом менее 500 секунд - чередовались 2 и 3, более - только 2.
Если нажать на B, то независимо от интервала времени, после нажатия на А надо чтобы чередование продолжилось (Было 2 - стало 3 и наоборот) так как в первой части, я имею ввиду с интервалом. Получается что при нажатии на B ( я так думаю) надо таймер выключать. НА А он снова должен заработать.

Пример 1:
A 100мс A 100мс A 100мс A 100мс A 100мс A 100мс A 800мс A 800мс A 800мс A 800мс A 800мс
2           3            2           3           2           3           2           2           2           2           2             тут всё работает как часики.

Пример 2:
A 100мс A 100мс A 100мс A 100мс A 800мс A 800мс A 800мс B 800мс A 100мс B 100мс A 10000мс B 10000мс A 100мс B 100мс A 100мс A 100мс A 900мс A 900мс A
2           3           2            3           2          2           2                        3                        2                               3                        2           3            2           2           2

27 (изменено: svoboden, 2018-04-25 05:58:36)

Re: Как настроить время ?

HASBULAT, это уже называется спам, лучше не спамьте.
А по вопросу, то вот, такого вот франкенштейна слепил, может, поможет:

         #Usehook       
          k := 1
          sdf := true
          werw := false

          #if sdf
          vk41::
          wer := true
          SetTimer, t, 2000
          k += 1
          send % k
          if k = 3
          k := 1
          return
          #if

          #if werw
          vk41::
          wer := true
          SetTimer, t, 2000
          k += 1
          send % k
          if k = 3
          k := 1
          return
          #if

          t:
          k := 1
          On := true
          wer := false
          return

          #if wer
          vk42::
          if k = 3
          k := 1
          return
          #if

          #if On
          vk42::
          if k = 1
          k := 2
          SetTimer, t, off
          sdf := false
          werw := true
          return
          #if

P.S. Более я не понимаю, чего вы хотите.

28 (изменено: HASBULAT, 2018-04-25 00:18:52)

Re: Как настроить время ?

svoboden пишет:

это уже называется спам, лучше не спамьте, а то модератор придет.

Да ладно. Я создал тему с просьбой о помощи. "От темы не отвлекаюсь", матами не ругаюсь, разговариваю вежливо и тихо. Это точно форум? Раздел "Общение" ?

svoboden пишет:

А по вопросу вот, такого вот франкенштейна слипил, может, поможет:

Нет к сожаленю, не помог. Франкенштейн мощный конечно, но блин не помог. Теперь при нажатии поочерёдно B  и A более 500 мс (поменял) просто 3, не чередуется. В прошлой версии было просто 2. Я тоже никак не могу заставить чередоваться.

29 (изменено: svoboden, 2018-04-25 00:30:41)

Re: Как настроить время ?

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

30

Re: Как настроить время ?

svoboden пишет:

Ок, надо подумать, не думаю, что тут сложно что-то. Просто слишком много счетчиков и переменных в нем. Потом напишу ответ.

Спасибо! Я блин целый день сам бьюсь и никак.

Если проследить, то при нажатии на B кидает в блок "#if On", там K становится =2 (тут мне кажется запара), отключается счётчик  и перебрасывает в блок "#if werw" (он же true). В нём при нажатии на А включается счётчик и если время следующего нажатия более 500 мс, то К становится =1, потом при нажатии на В выполняется условие "if k = 1
          k := 2" и так по кругу. Получается всегда (если между нажатиями В и А более 500 мс) выдаёт 3.

31

Re: Как настроить время ?

vk41::
   SetTimer, Timer, -500
   Send, % (t := !t) ? 2 : 3
   Return
   
Timer:
   prev_t := t
   t := 0
   Return
   
vk42:: t := prev_t

Это ж надо было из-за такой ерунды на две страницы болтовню разводить!

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

32 (изменено: HASBULAT, 2018-04-25 02:50:37)

Re: Как настроить время ?

teadrinker пишет:

Это ж надо было из-за такой ерунды на две страницы болтовню разводить!

Ну это потому что я полный ноль в этом, да ещё  не правильно объясняю наверно.
Но рано радоваться! Хотя теперь заработала половина второй части. Что имеем:
если долбить по А < 500 мс или более то тут всё правильно 232323/222222 соответсвенно.
Если долбить поочерёдно В и А интервал > 500 мс,  тут тоже всё правльно, очерёдность продолжается, 232323232 чередуются.
Но если долбить поочерёдно В и А с интервалом < 500 мс, тут или 22222222 или 33333333. Не чередуются

33

Re: Как настроить время ?

vk41::
   SetTimer, Timer, -500
   Send, % (prev_t := t := !t) ? 2 : 3
   Return
   
Timer:
   prev_t := t
   t := 0
   Return
   
vk42:: t := prev_t
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

34 (изменено: svoboden, 2018-04-25 02:57:42)

Re: Как настроить время ?

teadrinker, если бы так просто. Попробуйте нажать клавишу до 500 мс, когда нажата "2", опять нажмется "2".

35

Re: Как настроить время ?

У меня 3.

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

36 (изменено: svoboden, 2018-04-25 03:09:06)

Re: Как настроить время ?

А у меня двойку набирает.
Upd: То есть по нажатию на "b", цифра всегда должна быть противоположенная.

37 (изменено: HASBULAT, 2018-04-25 03:06:04)

Re: Как настроить время ?

teadrinker Это жесть какая-то, хочется ругаться матом. Цельный день убил. Убил бы больше если не помощь svoboden и teadrinker.
Скрипт работает как надо! Огромное человеческое спасибо вам!

P.S. Я правда не могу найти описание того что вы "нагородили" после команды send. Что значит % ? А вопросительный знак "?" перед 2 : 3 ? Просто хотел бы понять работу скрипта. Спасибо!

38

Re: Как настроить время ?

Читайте:
Как записать выражение в параметр команды, требующий строчного значения?
Операторы в выражениях —> Тернарный условный оператор.

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

39 (изменено: svoboden, 2018-04-26 01:44:46)

Re: Как настроить время ?

Вот доделал свой вариант:

	   #UseHook
	   
        k := 1

        vk41::
	    view := true
	    SetTimer, time, -500
	    k += 1
	    if k = 2
	    {
	    wer := false
	    view := false
	    qwe := true
	    }
	    if k = 3
	    {
	    qwe := false
	    view := false
	    wer := true
	    }
	    send % k
        if k = 3
	    k := 1
        return

	    time:
	    if k = 1 
	    {
	    k := 1
	    view := false
        qwe := false
	    wer := true
	    }
	    if k = 2
	    {	    
	    k := 1
	    view := false
	    wer := false
	    qwe := true
	    }
        return

        #if qwe
	    vk42::
	    SetTimer, time, off
	    if k = 1
	    {
	    k := 2
	    }
	    return
        #if

        #if wer
        vk42::
	    SetTimer, time, off
	    if k = 1
	    {
	    k := 1
	    }
        return
	    #if

        #if view
	    vk42::return
        #if

Так должно быть?

40

Re: Как настроить время ?

svoboden пишет:

Так должно быть?

ДА! Теперь и  "Франкенштейн" заработал .

41

Re: Как настроить время ?

svoboden пишет:

А у меня двойку набирает.
Upd: То есть по нажатию на "b", цифра всегда должна быть противоположенная.

Кажется понял, что вы имели в виду. Если нажать A и сразу следом B, а потом через полсекунды A, то мой код всегда выдаёт 2. По-моему, для ТС это некритично, но исправить несложно:

vk41::
   SetTimer, Timer, -500
   Send, % (prev_t := t := !t) ? 2 : 3
   Return
   
Timer:
   prev_t := t
   t := 0
   Return
   
vk42::
   SetTimer, Timer, Off
   t := prev_t
   Return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

42

Re: Как настроить время ?

teadrinker пишет:

По-моему, для ТС это не критично, но исправить несложно:

Теперь ваапче идеально!

43 (изменено: svoboden, 2018-04-26 02:25:22)

Re: Как настроить время ?

В общем вообще смешно. Нужно было всего лишь отключить таймер по клавише "B". И спрашивается, для чего было столько писать? Вот как новички могут запутать.

   vk41::
   SetTimer, time, -500
   Send, % (t:=!t) ? 2 : 3
   Return
   
   time:
   t := 0
   Return
   
   vk42::
   SetTimer, time, Off
   t := 1
   Return

44

Re: Как настроить время ?

svoboden пишет:

Нужно было всего лишь отключить таймер по клавише "B"

Неа, не всего лишь. при чередовании А и В > 500 мс сплошные 22222222.

45 (изменено: svoboden, 2018-04-26 02:10:09)

Re: Как настроить время ?

Внимательней скопируйте пример. Работает точно так же, как и все выше примеры. У меня все чередуется.

46

Re: Как настроить время ?

svoboden пишет:

Внимательный скопируйте пример. Работает точно так же, как и все выше примеры.

ТАк внимательней некуда, ctrl C - ctrl V.

HASBULAT пишет:

при чередовании А и В > 500 мс сплошные 22222222.

именно более 500мс .

47 (изменено: svoboden, 2018-04-26 02:32:04)

Re: Как настроить время ?

А сейчас скопируйте:

SetTimer, time, Off
t := 1

Или тоже не понимаете.

48 (изменено: HASBULAT, 2018-04-26 02:34:30)

Re: Как настроить время ?

svoboden пишет:

Добавил: t := 1.

Теперь тройка. А вот teadrinker  там как-то хитро это замутил, что всё работает. Ну или же твой "франкенштейн" .

49

Re: Как настроить время ?

Да, "франкенштейн" классный! Особенно эта часть:

	    if k = 1
	    {
	    k := 1
	    }

Это же новое слово в программировании!

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

50

Re: Как настроить время ?

teadrinker пишет:

Особенно эта часть:

у "К" нет шансов

51 (изменено: svoboden, 2019-09-21 10:05:30)

Re: Как настроить время ?

teadrinker пишет:

Это же новое слово в программировании!

Да, это точно!
А как такое программирование:

       vk41::
   SetTimer, time, -500
   Send, % (t:=!t) ? "2" : "3"
    if t = 1 
    {
    d := 1
    }
    if t = 0
    {	 
    d := 0
    }
    Return
   
    time:
    if t = 0
    {	 
    t := 0
    d := 0
    }
    if t = 1 
    {
    t := 0
    d := 1
    }
    Return
   
    vk42::
    SetTimer, time, off
    t := d
    return

52

Re: Как настроить время ?

svoboden пишет:

А как такое программирование

Не очень. Даже если этот код работает (не проверял), то посмотрев на него, совершенно невозможно сказать, что именно и по какому принципу там происходит. Код пишется не только для компьютера, но и для человека.

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

53 (изменено: svoboden, 2018-04-26 06:46:04)

Re: Как настроить время ?

Вот, укоротил свой первоначальный вариант:

    vk41::
    SetTimer, time, -500
    Send, % (t:=!t) ? 2 : 3
    if t = 1 
    d := 1
    if t = 0 
    d := 0
    Return
   
    time:
    t := 0
    Return
   
    vk42::
    SetTimer, time, off
    d:=!d ? t := 0 : t := 1
    return

А так понятней.

54 (изменено: teadrinker, 2018-04-26 06:47:58)

Re: Как настроить время ?

svoboden пишет:
    if t = 1 
    d := 1
    if t = 0 
    d := 0

Это то же самое, что d = t. А это

d:=!d ? t := 0 : t := 1

то же самое, что t = d.

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

55

Re: Как настроить время ?

Ок.