1 (изменено: ModUp, 2015-10-14 19:54:11)

Тема: Переключение между цыклами на одну кнопку

Есть скрипт.


*~$+Lbutton::
Loop 
{ 
GetKeyState, state, LButton, P
if state = U
break
      Click, D
      Sleep, 64
      Click, U
      Sleep, 120  
}
Return

Полный скрипт

Я использую его, но мне иногда нужно редактировать таймеры для разных ситуаций.

Можно ли как нибудь настроить переключение режимов?

Что бы при нажатии кнопки, например I, цыкл менялся на другой, а потом на третий и также на четвертый, а в конце пустой цыкл?

И так же мне иногда удобно использовать цыкл при заранее нажатом Shift, а иногда удобней просто при нажатой кнопке мышки, можно ли это тоже переключать?

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

P.S. Про то что у меня из-за скрипта не работает пробел при нажатом шифте  лучше промолчу :)

2

Re: Переключение между цыклами на одну кнопку

#Persistent
Tm:=[100,1000,5000]  ; тут через запятую указывается таймер для режимов.
Mode:=0 ; стартовый режим. 0 - это выкл.
settimer t,1
return
vk49::% (Timer:=0) true and ((Mode+=1) > Tm.MaxIndex()) and (Mode:=0) 

t:
if Mode and (A_TickCount > Timer) and (Timer := A_TickCount + Tm[Mode]) 
    if Mode = 1
    {
        tooltip Режим первый. Срабатывает каждые 100мс(0.1сек)
    }
    Else if Mode = 2
    {
        tooltip Режим второй. Срабатывает каждые 1000мс(1.0сек)
    }
    Else if Mode = 3
    {
        tooltip Режим Третий. Срабатывает каждые 5000мс(5.0сек)
    }
    
return

3 (изменено: ModUp, 2015-10-16 19:47:26)

Re: Переключение между цыклами на одну кнопку

Очень круто!
А как понять?
У  меня в первом режиме первый таймер 64 и второй таймер 120, потом во втором первый таймер 215 и второй 64, а в третьем режиме первый таймер 32 и второй 95.
Это мне нужно прописывать так?

#Persistent
Tm:=[64,120,215,64,32,64]  ; тут через запятую указывается таймер для режимов.
Mode:=0 ; стартовый режим. 0 - это выкл.
settimer t,1
return
vk49::% (Timer:=0) true and ((Mode+=1) > Tm.MaxIndex(3)) and (Mode:=0) 

t:
if Mode and (A_TickCount > Timer) and (Timer := A_TickCount + Tm[Mode]) 
    if Mode = 1
    {
        GetKeyState, state, LButton, P
if state = U
break
      Click, D
      Sleep, Tm
      Click, U
      Sleep, Tm  
    }
    Else if Mode = 2
    {
       GetKeyState, state, LButton, P
if state = U
break
      Click, D
      Sleep, Tm
      Click, U
      Sleep, Tm  
    }
    Else if Mode = 3
    {
       GetKeyState, state, LButton, P
if state = U
break
      Click, D
      Sleep, Tm
      Click, U
      Sleep, Tm  
    }
    
return

Или я не правильно понял?

4

Re: Переключение между цыклами на одну кнопку

Так?

#Persistent
Tm:=[   [64,120]  ,   [215,64]   ,   [32,64]   ]
Mode:=0 ; стартовый режим. 0 - это выкл.
SetFormat, float, 0.1

SleepAndWaitKey(time)
{
KeyWait vk49,% "D T" (time/1000)
if !ErrorLevel
    Exit
}

settimer t,1
return
vk49::
% ((T1:=0) true and (T2:=0) true and ((Mode+=1) > Tm.MaxIndex()) and (Mode:=0))
tooltip % "Режим: " Mode "`n1)Sleep: " Tm[Mode][1] "`n2)Sleep: " Tm[Mode][2]
KeyWait vk49
return

t:
if !Mode or !GetkeyState("Lbutton","p") 
    return

Send {q down}
SleepAndWaitKey(    Tm[Mode][1]     )
Send {q up}
SleepAndWaitKey(    Tm[Mode][2]     )
return

5

Re: Переключение между цыклами на одну кнопку

yalanne пишет:

Так?

#Persistent
Tm:=[   [64,120]  ,   [215,64]   ,   [32,64]   ]
Mode:=0 ; стартовый режим. 0 - это выкл.
SetFormat, float, 0.1

SleepAnd..

Я понимаю что должно работать, но не работает, даже q не нажимает.
(версия AHK Version v1.1.22.06 )

Может быть так?

+ открыть спойлер
Mode := 0

vk49::    ;  "I"
    N := 0
    Mode := ++Mode > 4 ? 1 : Mode
    SetTimer, LoopSend, Off
    
    If Mode = 1
        if !Mode or !GetkeyState("Lbutton","p") 
    return

Loop 
{ 
      Click, D
      Sleep, 64
      Click, U
      Sleep, 120  
}
Return
    Else If Mode = 2
        if !Mode or !GetkeyState("Lbutton","p") 
    return

Loop 
{ 
      Click, D
      Sleep, 215
      Click, U
      Sleep, 95  
}
Return
    Else If Mode = 3
        if !Mode or !GetkeyState("Lbutton","p") 
    return

Loop 
{ 
      Click, D
      Sleep, 64
      Click, U
      Sleep, 64  
}
Return
    Else If Mode = 4
 GoTo Mode4
LoopSend:
    SetTimer, LoopSend, % "-" . This[N := ++N > This.MaxIndex() ? 1 : N, 2]
    SendInput % This[N, 1]
    Return
  
Mode4:    
    Return

Только я не понимаю что ему не нравиться :(

6

Re: Переключение между цыклами на одну кнопку

цИкл