1 (изменено: size222, 2015-03-07 13:18:57)

Тема: AHK: Повторение цикла

Здравствуйте, подскажите пожалуйста, как в этом коде сделать повторение цикла + что бы при повторном нажатии на "Е" повторение прекращалось.

e::
Send, n
Sleep, 100
Send, {SPACE}
sleep, 100
Send, i
MouseClick, right,  1775,  666
Sleep, 10
Send, 3
MouseClick, right,  1778, 693
Sleep, 10
Send, i
Sleep, 10
Send, n
Sleep, 10
Send, {SPACE}

И еще, есть ли код, что бы мышка при

Send, i
MouseClick, right,  1775,  666
Sleep, 10
Send, 3
MouseClick, right,  1778, 693

игнорировала мои движения ею и мои нажатия на кнопки, а реагировала только на скрипт? Соответственно после включалась обратно.

Т.е. суть в том что бы когда мышка находится  в районе 1775,  666 и  1778, 693  грубо говоря замораживалась не была активной с моей стороны, а со стороны скрипта двигалась как обычно.


Я использую скрипт, но при этом делаю мышкой другие задачи. И  когда включатся скрипт (интервал 15 сек) мышка выполняла другие действия, и иногда нарушает работу скрипта. Вот если бы она отключалась на

Sleep, 100

хотя бы, вот тогда все работало.

2

Re: AHK: Повторение цикла

Sleep'ы надо заменить на while loop'ы, проверяющие сколько времени прошло (A_Now) и не нажата ли физически (getkeystate) кнопка-токен "е" или что там...

3 (изменено: yalanne, 2015-03-28 16:23:03)

Re: AHK: Повторение цикла

Вот скрипт

key_p:=0 ; В этой переменной хранится количество нажатий кнопки SC012
SC012:: ; SC012 - скан код клавиши [e\у]
loop ; Цикл
{
if (key_p=2) ? !(key_p:=0) : 0 ; Если кнопка нажата 2 раза то, сброс переменной и остановка цикла.
break
% !getkeystate(A_ThisHotkey,"P") and !key_p ? key_p++ : "" ;Устанавливает значение 1 для key_p, при условии если клавиша отпущена.
;- Ваш скрипт...
Send, n
Sleep, 100
Send, {SPACE}
sleep, 100
Send, i
MouseClick, right,  1775,  666,,0
Sleep, 10
Send, 3
MouseClick, right,  1778, 693,,0
Sleep, 10
Send, i
Sleep, 10
Send, n
Sleep, 10
Send, {SPACE}
;- Ваш скрипт...
}
return
#if (key_p) ; Если нажатий клавиши больше 1 и тд. то скрипт обращается сюда.
SC012::
key_p++ ;И прибавляет +1 к key_p
keywait SC012
return
#if

и вот блокировка курсора
вкл\выкл на кнопку windows.

LWIN::
block := block ? 0 : 1
if block
ClipCursor(1,GetCursorPos(0),GetCursorPos(4),GetCursorPos(0),GetCursorPos(4)) 
else
ClipCursor(False)
return
       
       
GetCursorPos(lpPoint)
{ ;https://github.com/jNizM/AHK_DllCall_WinAPI/blob/master/src/Cursor%20Functions/GetCursorPos.ahk
    static POINT, init := VarSetCapacity(POINT, 8, 0) && NumPut(8, POINT, "Int")
    if !(DllCall("user32.dll\GetCursorPos", "Ptr", &POINT))
        return DllCall("kernel32.dll\GetLastError")
    return NumGet(POINT, lpPoint , "Int")
}
ClipCursor(Confines := True, Left := 100, Top := 200, Right := 800, Bottom := 900)
{ ; https://github.com/jNizM/AHK_DllCall_WinAPI/blob/master/src/Mouse%20Input%20Functions/ClipCursor.ahk
    if !(Confines)
        return DllCall("user32.dll\ClipCursor")
    static RECT, init := VarSetCapacity(RECT, 16, 0)
    NumPut(Left, RECT, 0, "Int"), NumPut(Top, RECT, 4, "Int"), NumPut(Right, RECT, 8, "Int"), NumPut(Bottom, RECT, 12, "Int")
    if !(DllCall("user32.dll\ClipCursor", "Ptr", &RECT))
        return DllCall("kernel32.dll\GetLastError")
    return 1
}

4 (изменено: Eduard, 2015-03-28 22:58:59)

Re: AHK: Повторение цикла


e::
if (b:= !b)
    SetTimer, Cycle, 1000 ; период повторения – 1 секунда
else
    SetTimer, Cycle, off
return

Cycle:
; тело цикла
send, lal ;пример
return

BlockInput, on ; не реагирует на ввод
/*
код
*/
BlockInput, off ; возвращаем клавиатуре и мишке жизнь