101

Re: AHK: Внятное пояснение скобок и return к ним

CapsLock::
   if t := !t
      SetTimer, Cycle, -1 ; знак минус означает, что таймер запустится только один раз
   Return                 ; завершение подпрограммы клавиши CapsLock
   
Cycle:                    ; метка таймера
   while t {              ; выполнять, пока t = 1
      Send, 1
      Sleep, 1
   }
   Return                 ; завершение подпрограммы таймера
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

102

Re: AHK: Внятное пояснение скобок и return к ним

teadrinker пишет:

таймер запустится только один раз

А бесконечно как?

103

Re: AHK: Внятное пояснение скобок и return к ним

Бесконечно не нада.

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

104 (изменено: fgslm, 2020-07-25 16:51:17)

Re: AHK: Внятное пояснение скобок и return к ним

Хрен с ним с капс локом, я из цикла по модификатору выйти не могу. А если могу - то не могу зайти обратно.

105 (изменено: fgslm, 2020-07-25 17:52:51)

Re: AHK: Внятное пояснение скобок и return к ним


modifiers := ["Alt", "Shift", "Ctrl"]
loop 
if key := GetModifierState(modifiers)
break
else
{

}
return

GetModifierState(arr) {
loop {
  for k, v in arr
   if not GetKeyState(v, "P")
   {
   return
   }
   if GetKeyState(v, "P")
   {
    Return v
	}
	sleep 1
}
return
}

Что тут не так?

106

Re: AHK: Внятное пояснение скобок и return к ним

Тут всё замечательно.

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

107 (изменено: fgslm, 2020-07-25 20:10:29)

Re: AHK: Внятное пояснение скобок и return к ним

serzh82saratov пишет:

Тут всё замечательно.

Вам не кажется что тут чего-то не хватает?

108

Re: AHK: Внятное пояснение скобок и return к ним

Нет, всё на месте, оставляйте как есть.

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

109

Re: AHK: Внятное пояснение скобок и return к ним

serzh82saratov пишет:

оставляйте как есть.

fgslm пишет:

не могу зайти обратно.

110

Re: AHK: Внятное пояснение скобок и return к ним

Куда зайти, откуда, зачем?
Не понимаете, что вы приводите какой то новый кривой код, который неизвестно для чего мог быть предназначен, и спрашиваете "Что тут не так?".
Вы чё, издеваетесь тут над всеми, кому надо вас вновь распрашивать, чего вы там изволите.

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

111 (изменено: fgslm, 2020-07-26 03:35:28)

Re: AHK: Внятное пояснение скобок и return к ним

serzh82saratov пишет:

что вы приводите какой то новый кривой код

Что дают - то и привожу. Другого нету.

112

Re: AHK: Внятное пояснение скобок и return к ним

fgslm пишет:

Это код участников форума - не мой, так что к ним все претензии.

Если намекаете на мою функцию GetModifierState(arr), то у вас не она.

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

113

Re: AHK: Внятное пояснение скобок и return к ним

fgslm пишет:

Это код участников форума - не мой, так что к ним все претензии.

А, ну конечно же, как же я сразу её не узнал, тогда чего я тут влез.

Буду дальше думать что вы издеваетесь над всеми присутствующими, так как противоположный вывод из вашего поведения не соответствует моим представлениям о хомо сапиенс, выпуска даже 19 века.

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

114

Re: AHK: Внятное пояснение скобок и return к ним

И всё же: откуда взялась

key

?

115 (изменено: Alectric, 2020-07-26 09:09:46)

Re: AHK: Внятное пояснение скобок и return к ним



toggle := GetKeyState("Capslock", "T") ; инициализируем переменную toggle, чтобы она не была пустой


Начало:
loop
{
  while(toggle=0)
  {
    sleep,100
    toggle := GetKeyState("Capslock", "T")
    tooltip,Первое условие`n Состояние Capslock = %toggle%
  }

  while(toggle=1)
  {
    sleep,100
    toggle := GetKeyState("Capslock", "T")
    tooltip,Второе условие`n Состояние Capslock = %toggle%
  }

  while(toggle=0)
  {
    sleep,100
    toggle := GetKeyState("Capslock", "T")
    tooltip,Третье`n Состояние Capslock = %toggle%
  }

  while(toggle=1)
  {
    sleep,100
    toggle := GetKeyState("Capslock", "T")
    tooltip,4-е`n Состояние Capslock = %toggle%
  }

  Msgbox,начнем сначала`n Состояние Capslock = %toggle%
}


Alt::
Shift::
Ctrl::
tooltip
msgbox,цикл прерван. Нажмите Ок чтобы продолжить работу с начала.
goto,Начало ; прерваться в любом месте и начать все с начала




esc:: ; выход из программы
exitapp

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

116 (изменено: fgslm, 2020-07-26 09:17:41)

Re: AHK: Внятное пояснение скобок и return к ним

Alectric пишет:

goto,Начало ; прерваться в любом месте и начать все с начала

Мне надо выйти из цикла по модификатору, но так, чтобы не блокировались другие клавиши и не мешало другим функциям

Alt::
Shift::
Ctrl::
tooltip
msgbox,цикл прерван. Нажмите Ок чтобы продолжить работу с начала.
goto,Начало ; прерваться в любом месте и начать все с начала

Это не создаёт выход из цикла к сожалению.

117 (изменено: Alectric, 2020-07-26 09:27:22)

Re: AHK: Внятное пояснение скобок и return к ним


toggle := GetKeyState("Capslock", "T") ; инициализируем переменную toggle, чтобы она не была пустой

Начало:
loop
{
  while(toggle=0)
  {
    if modfctrs()
      goto,Начало
    sleep,100
    toggle := GetKeyState("Capslock", "T")
    tooltip,Первое условие`n Состояние Capslock = %toggle%
  }

  while(toggle=1)
  {
    if modfctrs()
      goto,Начало
    sleep,100
    toggle := GetKeyState("Capslock", "T")
    tooltip,Второе условие`n Состояние Capslock = %toggle%
  }

  while(toggle=0)
  {
    if modfctrs()
      goto,Начало
    sleep,100
    toggle := GetKeyState("Capslock", "T")
    tooltip,Третье`n Состояние Capslock = %toggle%
  }

  while(toggle=1)
  {
    if modfctrs()
      goto,Начало
    sleep,100
    toggle := GetKeyState("Capslock", "T")
    tooltip,4-е`n Состояние Capslock = %toggle%
  }

  tooltip
  Msgbox,Начнем сначала`n Состояние Capslock = %toggle%
}


modfctrs()
{
  return (GetKeyState("Alt", "P") or GetKeyState("Shift", "P") or GetKeyState("Ctrl", "P"))
}




esc:: ; выход из программы
exitapp

fgslm пишет:

выход из цикла.

Какого конкретно цикла? И выход куда относительно программы вцелом?

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

118 (изменено: fgslm, 2020-07-26 09:32:27)

Re: AHK: Внятное пояснение скобок и return к ним

Alectric пишет:

И выход куда относительно программы вцелом?

В функцию слежения за нажатием других клавиш

fgslm пишет:

if key := GetModifierState(modifiers)

кто-нибудь пояснит откуда берется KEY???

119 (изменено: Alectric, 2020-07-26 09:40:48)

Re: AHK: Внятное пояснение скобок и return к ним

Тогда покажи всем свой полный код. Мыж не знаем чего у тебя там дальше, еще какие-то клавиши есть. Это все влияет на логику работы программы т.к. у нас в распоряжении всего 1 поток.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

120

Re: AHK: Внятное пояснение скобок и return к ним

Alectric пишет:

Тогда покажи всем свой полный код.

Щас. Чтоб все над ним смеялись.

121 (изменено: Alectric, 2020-07-26 09:37:42)

Re: AHK: Внятное пояснение скобок и return к ним

key - это всего-лишь переменная, ты сам её создаешь. А её содержимое появляется из функции GetModifierState.

На примере моей функции:



loop
{
  a:=modfctrs()
  tooltip,% a
}

modfctrs()
{
  var:=(GetKeyState("Alt", "P") or GetKeyState("Shift", "P") or GetKeyState("Ctrl", "P"))
  return var ; возвращаем содержимое переменной var в точку вызова функции
}
fgslm пишет:

Щас. Чтоб все над ним смеялись.

Это с чего вдруг?

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

122 (изменено: fgslm, 2020-07-26 10:20:59)

Re: AHK: Внятное пояснение скобок и return к ним

Вначале цикла идёт проверка функции, по наличию которой соответственно прерывается цикл и выполняется функция

+ открыть спойлер
loop 
if (PressBlind or PressKey or PressCtrl)
break
else
{

}
return

;сама по себе функция содержит локальные и глобальные переменные
isInUse = 0
Modif = 0
PressKey( key ){
global isInUse
lreturn
}

PressCtrl( key ){
global isInUse = 1
loop {
if not GetKeyState( key, "P" )
{
isInUse = 0
return
}

PressBlind( key ){
loop {
return
}

;клавиши
*1::PressBlind( "1" )
;модификаторы
*^::PressCtrl( "^" )

Но если с перрыванием отдельных клавиш всё нормально - модификаторы в случае их такого же написания не имеют подобной функции, и блокируют другие функции, а если их не ввести в переменные принудительного срабатывания (*) они не прерывают цикл
В них (PressCtrl и т.д.)надо поместить какую-то переменную, также как функция PressBlind имеет приоритет над функцией PressKey за счёт вызова глобальных переменных, чтобы вызов этих функций модификаторов был менее приоритетен нежели нажатие других клавиш. Всё.

Но если в примерах с наполнением переменных в функциях мне стало более понятно то в случае с

+ открыть спойлер
PressKey( key ){
return
}

*1::PressBlind( "1" )

Вобщенепонятно откуда берется key

123 (изменено: Alectric, 2020-07-26 09:57:16)

Re: AHK: Внятное пояснение скобок и return к ним

Для начала:

  if (PressBlind or PressKey or PressCtrl)

Здесь нет вызова функций это просто имена переменных.
Чтобы вызвать функцию необходимо указать параметры принимаемые функцией, если параметров нет, то пишутся просто пустые скобки.

  if (PressBlind() or PressKey() or PressCtrl())

Да, переменные можно создать с таким же именем что и функция.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

124 (изменено: fgslm, 2020-07-26 10:04:16)

Re: AHK: Внятное пояснение скобок и return к ним

Alectric пишет:

Здесь нет вызова функций это просто имена переменных.

Ну да, ошибся, функция вызывается
*1::PressBlind( "1" )
а далее уже непрерывный цикл обращения от функции к циклу с проверкой параметров

Alectric пишет:

параметры принимаемые функцией

то есть

*1::PressBlind( "1" ) 

1 в данном сулчае есть key?

PressBlind( key ){
}

125 (изменено: Alectric, 2020-07-26 10:07:02)

Re: AHK: Внятное пояснение скобок и return к ним

Второй момент:



loop
{
  if (PressBlind or PressKey or PressCtrl)
    break
  else
  {

  }
}
return

;сама по себе функция содержит локальные и глобальные переменные
isInUse = 0
PressKey( key )
{
  global isInUse
  loop
  {
    if not GetKeyState( key, "P" )
    {
      break
    }
    if not isInUse
    {
      SendInput, {%key%}
    }
    sleep 1
  }
  return
}

Здесь содержимое переменной isInUse всегда будет пустым. Т.к. интерпретатор выполняет код построчно сверху вниз, а сверху у тебя бесконечный цикл, программа просто не дойдет до строки присваивания isInUse = 0.

И глобальную переменную достаточно объявить глобальной в одном месте, обычно в самом верху скрипта, где еще ничего не происходит.

global isInUse:=0
global Modif:=0

loop
{
  if (PressBlind() or PressKey() or PressCtrl())
    break
  else
  {

  }
}
return

;сама по себе функция содержит локальные и глобальные переменные
PressKey( key )
{
  loop
  {
    if not GetKeyState( key, "P" )
    {
      break
    }
    if not isInUse
    {
      SendInput, {%key%}
    }
    sleep 1
  }
  return
}

PressCtrl( key )
{
  isInUse = 1
  loop
  {
    if not GetKeyState( key, "P" )
    {
      isInUse = 0
      break
    }
    if GetKeyState( "Ctrl", "P" )
    {
      SendInput, ^{%key%}
    }
    sleep 1
  }
  return
}

PressBlind( key )
{
  loop
  {
    if not GetKeyState( key, "P" )
    {
      Modif = 0
      break
    }
    Modif = 1
    SendInput, {Blind}{%key%} ; Блокируем отжатие модификаторов при нажатие ключей
    sleep 1
  }
  return
}

;клавиши
*1::PressBlind( "1" )
;модификаторы
*^::PressCtrl( "^" )
Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

126 (изменено: fgslm, 2020-07-26 10:09:32)

Re: AHK: Внятное пояснение скобок и return к ним

Alectric пишет:

программа просто не дойдет до строки присваивания isInUse = 0.

Я понял что в AHK есть как глобальное присвоение, так и глобальное "считывание"(колхозно выразился, но тем не менее),
потому что когда присваивают локальную переменную в одной функции даже ниже по списку, она видна если выше поместить перед проверкой global переменная, вот как-то так.
В зависимости от того нажат модификатор или нет переменные меняют своё свойство локальным присвоением, и выше уже в функциях считываются глобально.

127 (изменено: Alectric, 2020-07-26 10:28:31)

Re: AHK: Внятное пояснение скобок и return к ним

fgslm пишет:

то есть

*1::PressBlind( "1" ) 

1 в данном сулчае есть key?

PressBlind( key ){
Msgbox,%key%
}

Да.



fgslm пишет:

Я понял что в AHK есть как глобальное присвоение, так и глобальное "считывание"(колхозно выразился, но тем не менее),
потому что когда присваивают локальную переменную в одной функции даже ниже по списку, она видна если выше поместить перед проверкой global переменная, вот как-то так.
В зависимости от того нажат модификатор или нет переменные меняют своё свойство, и выше уже в функциях считываются глобально.

Наверно да, я как-то не заморачивался с глобальными переменными.



Дальше я пока не вижу чем я могу помочь, т.к. не понимаю логики твоей программы, точнее что она должна делать.
Для большего понимания происходящего прочитай про потоки. Ссылка

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

128 (изменено: fgslm, 2020-07-26 10:36:17)

Re: AHK: Внятное пояснение скобок и return к ним

Alectric пишет:

прочитай про потоки.

Вернее про один поток) Их там нету. Я уже прочитал это.
Critical я использовал, но не увидел особой пользы также как и приоритет нажатия * работает.

Alectric пишет:

не понимаю логики твоей программы, точнее что она должна делать.

Подружить функции

fgslm пишет:

PressBlind и PressKey

с выходом из цикла по нажатию модификаторов

129 (изменено: Alectric, 2020-07-26 10:36:57)

Re: AHK: Внятное пояснение скобок и return к ним

fgslm пишет:

Подружить функции

Я имею ввиду результат работы программы.
Что по итогу должно происходить и при каких условиях.
К примеру: "нужно чтобы при нажатии "того-то" при условии что "то-то" происходило "вот это-вот"".

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

130 (изменено: fgslm, 2020-07-26 10:42:28)

Re: AHK: Внятное пояснение скобок и return к ним

Модификатор сам по себе не выводит из цикла, и когда ты его начинаешь зажимать готовясь нажать еще какую-то клавишу, цикл продолжает свою работу. Выход из цикла по клавишам работает, а по модификаторам нет.
По сути мне нужна ссылка в функции на функцию - чтобы перенаправить выполнение скрипта в неё из удержания модификатора в нажатие ключа.

131

Re: AHK: Внятное пояснение скобок и return к ним

Так, ладно...
Вот тут:

PressCtrl( key )
{
  isInUse = 1
  loop
  {
    if not GetKeyState( key, "P" )
    {
      isInUse = 0
      break
    }
    if GetKeyState( "Ctrl", "P" )
    {
      SendInput, ^{%key%}
    }
    sleep 1
  }
  return
}

;модификаторы
*^::PressCtrl( "^" )

Тут ты указал в параметр функции PressCtrl - "^".
Тоесть функция выполнит: SendInput,^{^}.
Для чего это ^{^}? Какая-то другая программа должна воспринять это или что?

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

132 (изменено: fgslm, 2020-07-26 11:00:00)

Re: AHK: Внятное пояснение скобок и return к ним

Alectric пишет:

Тоесть функция выполнит: SendInput,^{^}.

Да вот я тоже подумал что тупость, но как по-другому выйти из цикла...
Должно быть в идеале:
if GetKeyState( "Ctrl", "P" )
    {
      SendInput, ^{    Ссылка на какую-то функцию, которая уже нажимает ^ + ключ другой клавиши(если он существует), а если нет, то просто удерживает ^                          }
    }
    sleep 1
Но при отпускании всего этого дела через return скрипт пойдет сначала в ту функцию из которой был вызван, а потом обратно в цикл. Не очень хорошо с точки зрения производительности.

133

Re: AHK: Внятное пояснение скобок и return к ним

Ты думаешь что SendInput как-бы за тебя нажмет модификатор или программа перейдет на "*^::" я правильно тебя понял?
Если да, то - нет не перейдет.
SendInput просто отправляет нажатия клавиш в активное окно.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

134

Re: AHK: Внятное пояснение скобок и return к ним

Alectric пишет:

или программа перейдет на "*^::" я правильно тебя понял?

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

135

Re: AHK: Внятное пояснение скобок и return к ним

fgslm пишет:

ключ другой клавиши

Какой другой? Которую ты передал в качестве параметра в функцию?

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

136 (изменено: fgslm, 2020-07-26 11:11:52)

Re: AHK: Внятное пояснение скобок и return к ним

Alectric пишет:

Какой другой? Которую ты передал в качестве пар

Это разные функции, но они конфликтуют между собой.

Alectric пишет:

*1::PressBlind( "1" )

137

Re: AHK: Внятное пояснение скобок и return к ним

fgslm пишет:

код, он повторяет нажатия в loop (пока удерживаются ключи)

Он так и должен работать? Или он должен ждать нажатия модификатора?

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

138 (изменено: fgslm, 2020-07-26 11:14:37)

Re: AHK: Внятное пояснение скобок и return к ним

Alectric пишет:

Он так и должен работать?

Должен. Это функция работала без цикла, а с циклом она упёрлась в то - что модификаторы не прерывают цикл в отличие от ключей.

Меня бы устроил по сути вариант простого выхода из цикла по нажатию модификатора, который бы повиновался нижеуказанным функциям ожидания ключей т.е. имел бы более низкий приоритет чем они. Но Участники начали предлагать мне идеи двойных циклов и повтороного присвоения key переменных(которые бы конфликтовали с изначальной переменной key в этих функциях) и самостоятельные замкнутые функции обхода массивов возвращающих значение включенности модификаторов обратно в цикл, но не возобновляющих его, в чём я не увидел решения задачи.

139 (изменено: Alectric, 2020-07-26 11:26:40)

Re: AHK: Внятное пояснение скобок и return к ним

global isInUse:=0
global Modif:=0



PressMod( key )
{
  Modif:=key
}

PressBlind( key )
{
  loop
  {
    if Modif
      ModifPressed:=GetKeyState( Modif, "P" )
    else
      ModifPressed:=0
    if (not GetKeyState( key, "P" ) or ModifPressed)
    {
      Modif:=""
      break
    }
    SendInput, {Blind}{%key%} ; Блокируем отжатие модификаторов при нажатие ключей
    sleep 1
  }
  return
}

;клавиши
*1::PressBlind( "1" )
;модификаторы
*^::PressMod( "Ctrl" )



esc::
exitapp
Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

140 (изменено: fgslm, 2020-07-26 11:50:06)

Re: AHK: Внятное пояснение скобок и return к ним

Alectric пишет:
+ открыть спойлер
global isInUse:=0
global Modif:=0



PressMod( key )
{
  Modif:=key
}

PressBlind( key )
{
  loop
  {
    if Modif
      ModifPressed:=GetKeyState( Modif, "P" )
    else
      ModifPressed:=0
    if (not GetKeyState( key, "P" ) or ModifPressed)
    {
      Modif:=""
      break
    }
    SendInput, {Blind}{%key%} ; Блокируем отжатие модификаторов при нажатие ключей
    sleep 1
  }
  return
}

;клавиши
*1::PressBlind( "1" )
;модификаторы
*^::PressMod( "Ctrl" )



esc::
exitapp

Эмм, нет, теперь цикл пашет только когда я нажимаю 1, это немного не та идея. Нужно чтобы наоборот из него выходил.
А если поместить это ниже основного цикла, то также модификатор не прерывает вышестоящий цикл.

141

Re: AHK: Внятное пояснение скобок и return к ним

fgslm пишет:

Нужно чтобы наоборот из него выходил.

Ничего не понятно. Можно полными предложениями? Я ж не вижу чего у тебя в мозгу происходит, как должно быть, но без лишних слов.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

142 (изменено: Alectric, 2020-07-26 11:55:52)

Re: AHK: Внятное пояснение скобок и return к ним

Как я тебя понял:
Нажимаешь "1" пока держишь "1" - идет цикличная отправка "1".  Нажимаешь модификатор Ctrl (не отпуская 1) или отпускаешь 1 отправка "1" прекращается.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

143 (изменено: fgslm, 2020-07-26 12:07:32)

Re: AHK: Внятное пояснение скобок и return к ним

Alectric пишет:

Как я тебя понял:
Нажимаешь "1" пока держишь "1" - идет цикличная отправка "1"(угу и цикл не выполняется).  Нажимаешь модификатор Ctrl (не отпуская 1) (цикл также не возобновляет свою работу. 1 ведь не отпущена еще), Нажимаешь модификатор Ctrl  без 1, цикл прекращает свою работу(и просто в пустоте гуляет удерживая Ctrl), а если в дополнении к этому нажать еще и 1 после нажатия Ctrl то должно нажиматься ^1, до тех пор, пока они удерживаются, потом если будет Shift, тоже самое, и с ALt.

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

144 (изменено: Alectric, 2020-07-26 12:07:58)

Re: AHK: Внятное пояснение скобок и return к ним

fgslm пишет:

(угу и цикл не выполняется)

Какой именно цикл? В программе он не один. Любое место где Loop или While называется циклом.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

145 (изменено: fgslm, 2020-07-26 12:09:40)

Re: AHK: Внятное пояснение скобок и return к ним

Alectric пишет:
fgslm пишет:

(угу и цикл не выполняется)

Какой именно цикл? В программе он не один.

Основной, который идёт выше. Он не связан с ключами никак.
По сути - это автопилот. Для примера возьмём машину тесла, которая ездит по карте, у неё там метки из космоса и она гоняет по ним, пока водитель не возьмётся за руль, и тут вступает ручное управление.

146

Re: AHK: Внятное пояснение скобок и return к ним

В таком случае придется использовать таймера.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

147

Re: AHK: Внятное пояснение скобок и return к ним

Alectric пишет:

В таком случае придется использовать таймера.

Жизнь - боль.

148

Re: AHK: Внятное пояснение скобок и return к ним

fgslm пишет:

Жизнь - боль.

Это 1 поток - боль.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

149 (изменено: fgslm, 2020-07-26 12:18:44)

Re: AHK: Внятное пояснение скобок и return к ним

*1::PressBlind( "1" ) же как-то прерывает цикл. Можно как-то перенаправить в другую функцию такое же нажатие модификатора? Присвоив ей переменную что он используется сам по себе (без ключа), и циклично проверять подключение ключа, а в случае его появления перенаправить в обычную функцию?

150 (изменено: Alectric, 2020-07-26 12:32:45)

Re: AHK: Внятное пояснение скобок и return к ним

Не получится т.к. 1 поток и рекурсия. Тут рандомная страница из интернета просто в пример.
http://www.tvd-home.ru/images/recursion/r1.gif

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

151 (изменено: Alectric, 2020-07-26 12:56:08)

Re: AHK: Внятное пояснение скобок и return к ним

loop
{
  sleep,10
  tooltip,Основной цикл %a_tickcount%

  gosub,ПодпрограммаБезВсякихЦиклов
}

*1::return ; заглушка

ПодпрограммаБезВсякихЦиклов:
PCtrl:=GetKeyState("Ctrl","P")
PAlt:=GetKeyState("Alt","P")
PShift:=GetKeyState("Shift","P")

if GetKeyState("1","P")
{
  if PCtrl
    SendInput,{ctrl down}3{ctrl up}
  else if PAlt
    SendInput,{alt down}3{alt up}
  else if PShift
    SendInput,{shift down}3{shift up}
  else
    SendInput,3
}
return

esc::
exitapp
Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

152

Re: AHK: Внятное пояснение скобок и return к ним


loop
{
  sleep,10
  tooltip,Основной цикл %a_tickcount%
}



*1::settimer,ПодпрограммаБезВсякихЦиклов,10
*1 up::settimer,ПодпрограммаБезВсякихЦиклов,off



ПодпрограммаБезВсякихЦиклов:
PCtrl:=GetKeyState("Ctrl","P")
PAlt:=GetKeyState("Alt","P")
PShift:=GetKeyState("Shift","P")

if GetKeyState("1","P")
{
  if PCtrl
    SendInput,{ctrl down}3{ctrl up}
  else if PAlt
    SendInput,{alt down}3{alt up}
  else if PShift
    SendInput,{shift down}3{shift up}
  else
    SendInput,3
}
return


esc::
exitapp
Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

153

Re: AHK: Внятное пояснение скобок и return к ним

Отличия

Alectric пишет:

Не получится т.к. 1 поток и рекурсия.

Есть же приоритеты и Critical, и запуск по * и ~ вобщем я со всем еще не разобрался.
--

Alectric пишет:
+ открыть спойлер

loop
{
  sleep,10
  tooltip,Основной цикл %a_tickcount%
}



*1::settimer,ПодпрограммаБезВсякихЦиклов,10
*1 up::settimer,ПодпрограммаБезВсякихЦиклов,off



ПодпрограммаБезВсякихЦиклов:
PCtrl:=GetKeyState("Ctrl","P")
PAlt:=GetKeyState("Alt","P")
PShift:=GetKeyState("Shift","P")

if GetKeyState("1","P")
{
  if PCtrl
    SendInput,{ctrl down}3{ctrl up}
  else if PAlt
    SendInput,{alt down}3{alt up}
  else if PShift
    SendInput,{shift down}3{shift up}
  else
    SendInput,3
}
return


esc::
exitapp

Нет, так 3-ка нажимается когда жмёшь 1))

154 (изменено: Alectric, 2020-07-26 13:09:02)

Re: AHK: Внятное пояснение скобок и return к ним

fgslm пишет:

Нет, так 3-ка нажимается когда жмёшь 1))

Это просто пример, ставь туда что тебе нужно вместо тройки и все.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

155

Re: AHK: Внятное пояснение скобок и return к ним

Alectric пишет:
fgslm пишет:

Нет, так 3-ка нажимается когда жмёшь 1))

Это просто пример, ставь туда что тебе нужно вместо тройки и все.

Не выходит из цикла - просто борется с ним.

156 (изменено: Alectric, 2020-07-26 14:01:59)

Re: AHK: Внятное пояснение скобок и return к ним

fgslm пишет:

Не выходит из цикла

Зачем из него выходить? Пускай себе крутит дальше пустую программу которая просто показывает время работы скрипта.


fgslm пишет:

из цикла

Опять непонятно из какого цикла. Если что-то абстрактное говоришь, то показывай в рабочем коде, а не просто на словах. Из-за непонятности люди раздражаются и больше не хотят помогать непонимающему, потому что не понимают что объяснять.





Думаю по названию темы "Внятное пояснение скобок и return к ним" скобки у тебя вопросов больше не вызывают? Предлагаю закрыть тему, и создать другую под другой вопрос.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

157 (изменено: fgslm, 2020-07-26 20:10:08)

Re: AHK: Внятное пояснение скобок и return к ним

Alectric пишет:

непонятности люди раздражаются

Пусть тренируют стрессоустойчивость и проницательноть. Это же тренировка)

Alectric пишет:

Внятное пояснение скобок и return к ним" скобки у тебя вопросов больше не вызывают

Вызывают. Более того, думаю большинство убедилось в том, что оно немного не так как в справке работает(описание действительно лишь на 30%) Поэтому пусть висит, как немое напоминание о том, сколько нам еще неизвестно.

Alectric пишет:

и создать другую под другой вопрос.

У меня только один вопрос - как создать такую переменную чтобы не мешала остальным и переключала за секунду приоритеты между модификаторами и ключами. Костыль получится, но без него... Эхх.. Михаила бы щас сюда, он бы пояснил за костыли)

158 (изменено: Alectric, 2020-07-26 20:47:52)

Re: AHK: Внятное пояснение скобок и return к ним

fgslm пишет:

не так как в справке работает(описание действительно лишь на 30%)

Всё работает в соответствии со справкой на 100%. Просто не все могут сразу понять что в ней написано, понимание приходит со временем и после вдумчивого прочтения несколько раз (а не беглым взглядом).

Сам так начинал. Прочитал по быстрому, подумал что все понял, а по факту - ничего не работает. На седьмой раз до меня дошло что "Так вооон оно оказывается как! А я то думал.".

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

159

Re: AHK: Внятное пояснение скобок и return к ним

Alectric пишет:
fgslm пишет:

не так как в справке работает(описание действительно лишь на 30%)

На седьмой раз до меня дошло что "Так вооон оно оказывается как! А я то думал.".

Ну да, я дурак.
Только вот существует много "НО" и "А", о которых никто не говорит, и пока об эти условия на собственном опыте не споткнёшься, тебе не понятны будут мотивы и поведение других людей, которые это уже прошли.

160 (изменено: Alectric, 2020-07-26 21:25:32)

Re: AHK: Внятное пояснение скобок и return к ним

fgslm пишет:

много "НО" и "А"

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


fgslm пишет:

на собственном опыте не споткнёшься

Спотыкаются даже программисты с образованием.
А мы тут только костыли да говнокод пишем, мало у кого здесь образование программиста.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

161 (изменено: fgslm, 2020-07-27 19:13:14)

Re: AHK: Внятное пояснение скобок и return к ним

fgslm пишет:

modifiers := ["Alt", "Shift", "Ctrl"]
loop 
if (PressBlind or PressAlt or PressKey or PressCtrl or PressShift or key := GetModifierState(modifiers))
break
else
{

}
return

GetModifierState(arr) {
loop {
 if (PressBlind or PressKey or PressCtrl) ; И почему не прерывает данная процедура цикл
 break
  for k, v in arr
   if not GetKeyState(v, "P")
   {
   return
   }
 if (PressBlind or PressKey or PressCtrl) ; тут же она должна прерываться в сулчае обращения скипта к другой функции
 break
   if GetKeyState(v, "P")
   {
    Return v  ; Куда возвращает v?
	}
	sleep 1
}
return
}

isInUse = 0

PressKey ( key ){
global isInUse
loop {
if not GetKeyState( key, "P" ){
break
}
if not isInUse  {
SendInput, {%key%}
}
sleep 1
}
return
}

PressCtrl( key ){
global isInUse = 1
loop {
if not GetKeyState( key, "P" )
{
isInUse = 0
break
}
if GetKeyState( "Ctrl", "P" ){
SendInput, ^{%key%}
}
sleep 1
}
return
}

PressBlind( key ){
loop {
if not GetKeyState( key, "P" ){
break
}
SendInput, {Blind}{%key%}
sleep 1
}
return
}

*1::PressBlind( "1" )

Ладно, а что если вот так?

162

Re: AHK: Внятное пояснение скобок и return к ним

Alectric пишет:

А мы тут только костыли да говнокод пишем

Alectric, за всех не надо говорить.

163 (изменено: fgslm, 2020-07-27 18:43:09)

Re: AHK: Внятное пояснение скобок и return к ним

123
Как сделать чтобы вот это:


GetModifierState(arr) {
loop {
 if (PressBlind or PressKey or PressCtrl) ; И почему не прерывает данная процедура цикл
 break
  for k, v in arr
   if not GetKeyState(v, "P")
   {
   return
   }
 if (PressBlind or PressKey or PressCtrl) ; тут же она должна прерываться в сулчае обращения скипта к другой функции
 break
   if GetKeyState(v, "P")
   {
    Return v  ; Куда возвращает v?
	}
	sleep 1
}
return
}

Ссылалось на это:

PressBlind( key ){
loop {
if not GetKeyState( key, "P" ){
break
}
SendInput, {Blind}{%key%}
sleep 1
}
return
}

?

164 (изменено: Alectric, 2020-07-27 19:12:26)

Re: AHK: Внятное пояснение скобок и return к ним

fgslm пишет:

if (PressBlind or PressKey or PressCtrl) ; И почему не прерывает данная процедура цикл

Потому-что эти переменные пусты. Им нужно присвоить значение.


 
GetModifierState(arr) {
loop {
msgbox,% "PressBlind = """ PressBlind """`nPressKey = """ PressKey """`nPressCtrl = """ PressCtrl """"
msgbox, if (PressBlind or ...
  if (PressBlind or PressKey or PressCtrl) ; И почему не прерывает данная процедура цикл
  break
msgbox,мимо
PressBlind =1
PressKey =1
PressCtrl =1
msgbox,% "PressBlind = """ PressBlind """`nPressKey = """ PressKey """`nPressCtrl = """ PressCtrl """"

    for k, v in arr
      if not GetKeyState(v, "P")
      {
      return
      }
  if (PressBlind or PressKey or PressCtrl) ; тут же она должна прерываться в сулчае обращения скипта к другой функции
  break
      if GetKeyState(v, "P")
      {
        Return v  ; Куда возвращает v?
  }
  sleep 1
}
return
}
fgslm пишет:

Return v  ; Куда возвращает v?

Туда откуда была вызвана функция.

https://coollib.com/i/9/121309/img007.png
Источник.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

165 (изменено: fgslm, 2020-07-27 19:13:37)

Re: AHK: Внятное пояснение скобок и return к ним

Alectric пишет:

Им нужно присвоить значение.

Значение присваивается

*1::PressBlind( "1" )

Ну да, там немножко другое название было. Но можно догадаться.

166 (изменено: Alectric, 2020-07-27 19:29:49)

Re: AHK: Внятное пояснение скобок и return к ним

fgslm пишет:

PressBlind( "1" )

Это не присвоение значения - это вызов функции с указанием параметра.

Функции читай внимательно.



Malcev пишет:

за всех не надо говорить.

Извиняюсь, вырвалось.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

167 (изменено: fgslm, 2020-07-28 01:29:02)

Re: AHK: Внятное пояснение скобок и return к ним

Alectric пишет:
fgslm пишет:

PressBlind( "1" )

Это не присвоение значения - это вызов функции с указанием параметра.

Функции читай внимательно.

Да господи мне уже неважно как это называется. Скажите уже кто-нибудь как этот выход из цикла забабахать!

??????????????????????

168

Re: AHK: Внятное пояснение скобок и return к ним

fgslm пишет:

Я вот не ищу быстрого решения, я ищу то, что поможет комплексно решить проблему в первоисточнике и больше о ней не думать. Потому что, как правило, если мы живём в социуме, наши же решения к нам возвращаются - к кому-то в виде костылей, а кому-то в виде копмлексного решения.

уже неважно как это называется.

С таким подходходом - комплексного решения не выйдет. Вывод - пиши костыль без использования функций и циклов.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

169

Re: AHK: Внятное пояснение скобок и return к ним

Alectric пишет:

Вывод - пиши костыль без использования функций и циклов.

Как?

170

Re: AHK: Внятное пояснение скобок и return к ним

while 1 == 1{
Alt1 := GetKeyState("Alt", "P")
Ctrl1 := GetKeyState("Ctrl", "P")
Shift1 := GetKeyState("Shift", "P")
if (Alt1 or Ctrl1 or Shift1)
break
else
if (not Alt1 or not Ctrl1 or not Shift1)
{

}
}
return

почему, когда нажимаю на модифиаторы цикл прекращает свою работу, но когда отпускаю не возобновляет?

171

Re: AHK: Внятное пояснение скобок и return к ним

stealzy пишет:

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

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

172

Re: AHK: Внятное пояснение скобок и return к ним

fgslm, с таким ужасным оформлением кода у вас впереди еще будет много проблем.

173 (изменено: fgslm, 2020-07-29 02:38:32)

Re: AHK: Внятное пояснение скобок и return к ним

Malcev пишет:

с таким ужасным оформлением кода у вас впереди еще будет много проблем.

У меня нету форматора
Взялись бы да запилили на форум автоформат кода AHK, раз уж тут столько матёрых кодеров сидит.

174

Re: AHK: Внятное пояснение скобок и return к ним

А самому пробелы нажимать рука не поднимается?

175

Re: AHK: Внятное пояснение скобок и return к ним

Malcev пишет:

А самому пробелы нажимать рука не поднимается?

По моим подсчётам я напишу в 10 раз больше кода не нажимая пробелы, чем нажимая их. Времени нету.

176

Re: AHK: Внятное пояснение скобок и return к ним

И потратите в 10 раз больше времени при отладке полученных простыней.

177 (изменено: svoboden, 2020-07-30 13:56:55)

Re: AHK: Внятное пояснение скобок и return к ним

Я сколько не читал, даже не понял как работает i := !i, а тут уже сколько вопросов. Умом ahk не понять, по-моему

178

Re: AHK: Внятное пояснение скобок и return к ним

Это не AHK, а логические операторы. Они имеются во всех языках программирования. Чтобы понять, нужно читать справку.

i := 1
MsgBox, %i%

i := !i
MsgBox, %i%

i := !i
MsgBox, %i%

i := !i
MsgBox, %i%

Но понимать голый код не особо интересно. Вот когда у Вас стоит какая-то цель, изучать незнакомые команды гораздо интереснее.

179 (изменено: svoboden, 2020-07-30 14:50:04)

Re: AHK: Внятное пояснение скобок и return к ним

ypppu да знаю, что это логические операторы .

180

Re: AHK: Внятное пояснение скобок и return к ним

Вот и хорошо!

181

Re: AHK: Внятное пояснение скобок и return к ним

serzh82saratov пишет:

А вы к какому языку привыкли?

Как я понимаю, к Паскаль

182 (изменено: fgslm, 2020-08-02 04:23:01)

Re: AHK: Внятное пояснение скобок и return к ним

ypppu пишет:

Вот когда у Вас стоит какая-то цель

Да - цель стоит. Но когда ты планируешь достичь её до обеда, а тебя на форуме отправляют люди которые знают ответ в гугл или википедию читать справку(что затянется примерно дня на 3) И зачем мне это, когда я не хочу связывать свою жизнь с программированием, а просто решить 1-2 задачи с помощью этого языка, то планы становятся нереализуемы. А если я решу уже более плотно подойти к изучению и конкретно стать кодером, то на кой х* вы мне нужны? Я и так всё изучу. Вот потом говорят что вы хамовато себя к отвечающим ведетё. Какой посыл - такой и ответ.

183

Re: AHK: Внятное пояснение скобок и return к ним

fgslm
Стоит вежливо общаться с людьми, а не как вы.

184

Re: AHK: Внятное пояснение скобок и return к ним

Про цель - я вообще-то к svoboden обращался.

185

Re: AHK: Внятное пояснение скобок и return к ним

fgslm пишет:

И зачем мне это, когда я не хочу связывать свою жизнь с программированием, а просто решить 1-2 задачи с помощью этого языка

Тогда вам прямая дорога в коммерческий раздел либо на другой форум, так как:

1.1. "Серый форум" - это добровольное сообщество людей, обсуждающих проблемы программирования на различных макроязыках и в скриптовых средах. Это сообщество людей, помогающих друг другу, сообщество профессионалов или пытающихся стать таковыми.

http://forum.script-coding.com/rules.html

186 (изменено: fgslm, 2020-08-03 08:05:18)

Re: AHK: Внятное пояснение скобок и return к ним

SuBrex пишет:

Стоит вежливо общаться с людьми

А я что кого-то нахер послал?

Malcev пишет:

"Серый форум" - это добровольное сообщество людей, обсуждающих проблемы

Что их обсуждать? Любая проблема от незнания. И вы чего-то незнаете. Это правило лукавство прикрывающее ваше незнание.
Но также и:

Malcev пишет:

Это сообщество людей, помогающих друг другу

Не вижу чтобы тут помогали)

Malcev пишет:

сообщество профессионалов

Но не написано в какой "сфере"

Malcev пишет:

пытающихся стать таковыми.

Так я и пытаюсь, но в сфере смежной к программированию

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

187

Re: AHK: Внятное пояснение скобок и return к ним

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

188

Re: AHK: Внятное пояснение скобок и return к ним

fgslm
Ну, мне на этом форуме и помогали, и мою тупость терпели, но и я не хамил и вопросы правильно задавал, поэтому и ко мне относились иначе.

189 (изменено: fgslm, 2020-08-03 18:57:20)

Re: AHK: Внятное пояснение скобок и return к ним

stealzy пишет:

просто решить 1-2 задачи в суде

Конечно, решить вы можете, но вот представлять ваши интересы - это уже коммерческий раздел)
И вобще, если бы вы знали на сколько затягиваются юридические процессы независимо вашей квалификации(у вас бы 3 дня не хватило)

SuBrex пишет:

вопросы правильно

Т.е. мне надо с готовым ответом сюда придти и поиграть с участниками в игру "Я не знаю", разыгрывая из себя незнание. И подводить их правильными вопросами к правильному ответу?

SuBrex пишет:

мою тупость терпели

Мою тоже терпели, но потом оказалось что терпением тут прикрываются, чтобы отправить в коммерческий раздел. Не у всех конечно, но есть личности.

190

Re: AHK: Внятное пояснение скобок и return к ним

fgslm
Всё просто. Хочешь получить консультацию - предоставляешь свою код, говоришь: "Вот тут проблема, скажите как решить". Тебе говорят: "Вот тут причина". Все довольны.
Если ты приходишь не с вопросом, а с "напишите мне код", то в коммерческий раздел.
Хотят ли здесь тратить своё время на экономию твоего? Нет, не хотят.
Грубо говоря, на этом форуме НЕ ПИШУТ за тебя скрипты, здесь тебе ПОМОГАЮТ их написать .

191 (изменено: fgslm, 2020-08-03 19:46:25)

Re: AHK: Внятное пояснение скобок и return к ним

SuBrex пишет:

предоставляешь свою код, говоришь: "Вот тут проблема, скажите как решить". Тебе говорят: "Вот тут причина". Все довольны.

fgslm пишет:

modifiers := ["Alt", "Shift", "Ctrl"]
loop 
if key := GetModifierState(modifiers)
break
else
{

}
return

GetModifierState(arr) {
loop {
  for k, v in arr
   if not GetKeyState(v, "P")
   {
   return
   }
   if GetKeyState(v, "P")
   {
    Return v
	}
	sleep 1
}
return
}

Что тут не так?

serzh82saratov пишет:

Тут всё замечательно.

fgslm пишет:
serzh82saratov пишет:

Тут всё замечательно.

Вам не кажется что тут чего-то не хватает?

serzh82saratov пишет:

Нет, всё на месте, оставляйте как есть.

Вот вам и пример. Хотя я конкретно сразу сказал что мне нужно.

fgslm пишет:

Мне надо выйти из цикла по модификатору, но так, чтобы не блокировались другие клавиши и не мешало другим функциям

Но тут так не работает. Когда ты говоришь людям "у меня есть код", у них в мыслях совсем другой код - который решает ту же проблему. Но проблему они не видят. И когда ты говоришь: "Мне нужен менеджер паролей".. или: "Нужен скрипт автозаполнения форм", и прочее, - Они улыбаются и говорят: "В коммерческий раздел".

SuBrex пишет:

ПОМОГАЮТ их написать

Да, когда идея готова. Но когда ты сам не знаешь как оно вобще должно работать, а тебя еще и в справку отправляют, при каждом пуке.

Для вопрошающих я бы посоветовал держать чёткую форму идеи. И использовать язык для идеи, а не идею для языка. А то хаос начинается.

192 (изменено: fgslm, 2020-08-03 20:20:53)

Re: AHK: Внятное пояснение скобок и return к ним

Подитоживая же, можно сказать что тут я понял только: что
1. команда continue в отличие от других языков не переводит чтение дальше, а возвращает его к началу. (Странное действие. Но надо с ним свыкнуться)
2. Return используется всеми как всемогущая палка, которой они едят, спят, гоняют коров, летают в космос, и чего-только не делают. Что мне видится отдачей ей слишком больших функций.

И еще понял что если локализуешь вопросы, а не даёшь всю идею в целом, люди начинают нервничать и скатываются до оскорблений, как например случилось с serzh82saratov
Больше я тут ничего не понял. Тему можно закрывать.