1 (изменено: ypppu, 2016-11-11 17:11:28)

Тема: AHK: Прерывание в скрипте с "while GetKeyState"

День добрый. Подскажите есть ли способ прервать или сбросить на начало скрипт с "while GetKeyState" в любой момент не завершая полный цикл?

 sc2::
 while GetKeyState("sc2", "P")
{
"скрипт
}
Return 

2

Re: AHK: Прерывание в скрипте с "while GetKeyState"

Можно поставить в тело цикла некое условие. И, если оно будет выполнено, то выполнить команду Break (прервать цикл). Сбросить в начало скрипт можно командой Reload. Если нужно начать заново только цикл, то есть команда GoTo.

3 (изменено: Hyperspeed, 2016-11-11 19:56:11)

Re: AHK: Прерывание в скрипте с "while GetKeyState"

ypppu
Вечер добрый. Подскажите, что если в скрипте 2-3 действующие кнопки? Можно ли сделать чтоб прерывая к примеру первый цикл второй кнопкой после завершения действия с второй кнопки скрипт не продолжал прерванный цикл с первой?

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

xButton2:: 
 while GetKeyState("xButton2", "P")
 {
"скрипт
 }
 Return

sc2::
 while GetKeyState("sc2", "P")
{
"скрипт
}
Return

sc4::
 while GetKeyState("sc4", "P")
{
"скрипт
}
Return 

4

Re: AHK: Прерывание в скрипте с "while GetKeyState"

xButton2::
flag := 1
While GetKeyState("xButton2", "P")
{
If flag = 0
Break
;скрипт
}
Return

sc2::
flag := 0
While GetKeyState("sc2", "P")
{
;скрипт
}
Return

sc4::
flag := 0
While GetKeyState("sc4", "P")
{
;скрипт
}
Return 

5 (изменено: Hyperspeed, 2016-11-12 00:15:16)

Re: AHK: Прерывание в скрипте с "while GetKeyState"

ypppu
Благодарю за вариант, но увы работает как мой старый. Наверное следовало уточнить, что у меня просто набор кнопок там где "скрипт. Вставлять  1 и 3 нужно в случайное время при надобности и в итоге получается так сказать каша.

Вот собственно весь скрипт:

 xButton2:: 
 while GetKeyState("xButton2", "P")
 {
  Send {sc5}
	Sleep 150
  Send {sc21}
	Sleep 130
  Send {sc14}
	Sleep 150
  Send {sc5}
	Sleep 135
  Send {sc21}
	Sleep 150
  Send {sc5}
  Send {sc3}
	Sleep 130
  Send {sc21}
	Sleep 130
  Send {sc5}
	Sleep 130
  Send {sc21}
	Sleep 100
  Send {sc13}
	Sleep 100
  Send {sc5}
	Sleep 130
  Send {sc14}
	Sleep 150
  Send {sc5}
	Sleep 135
  Send {sc21}
	Sleep 250
 }
 Return

sc2::
 while GetKeyState("sc2", "P")
{
	Sleep 300
  Send {sc2}
	Sleep 400
  Send {sc21}
	Sleep 800
  Send {vk56}
	Sleep 350
  Send {sc5}
	Sleep 700
  Send {sc14}
	Sleep 850
  Send {sc13}
	Sleep 145
  Send {sc5}
}
Return

sc4::
 while GetKeyState("sc4", "P")
{
	Sleep 300
  Send {sc4}
	Sleep 1500
  Send {vk56}
	Sleep 350
  Send {sc5}
	Sleep 700
  Send {sc14}
	Sleep 850
  Send {sc13}
	Sleep 145
  Send {sc5}
}
Return 

6

Re: AHK: Прерывание в скрипте с "while GetKeyState"

Какая ещё каша? При нажатии xButton2:: должны циклично выполняться действия в фигурных скобках.
По нажатию sc2:: или sc4:: эти действия доходят до конца и более не повторяются. А Вы хотели разорвать цикл на полпути? Любой прерванный поток возобновляется.

7

Re: AHK: Прерывание в скрипте с "while GetKeyState"

XButton2 := [ [5, 150], [21, 130], [14, 150], [5, 135], [21, 150], [5, 0], [3, 130], [21, 130], [5, 130], [21, 100], [13, 100], [5, 130], [14, 150], [5, 135], [21, 250] ]
sc2 := [ [0, 300], [2, 400], [21, 800], ["2f", 350], [5, 700], [14, 850], [13, 145], [5, 0] ]
sc4 := [ [0, 300], [4, 1500], ["2f", 350], [5, 700], [14, 850], [13, 145], [5, 0] ]
flag := []

XButton2:: flag[1] := false, SendKeys(A_ThisHotkey, true, flag)

sc2::
sc4:: flag[1] := true, SendKeys(A_ThisHotkey, false, flag)

SendKeys(key, var, flag)  {
   while GetKeyState(key, "P")  {
      for k, v in %key%  {
         if v[1]
            Send, % "{sc" . v[1] . "}"
         if v[2]
            Sleep, v[2]
         if var && flag[1]
            break
      }
   }
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8

Re: AHK: Прерывание в скрипте с "while GetKeyState"

teadrinker
Вечер добрый. Это именно то, что я и хотел. Благодарю Вас за помощь.