1 (изменено: ratatata., 2011-09-29 23:15:19)

Тема: AHK: Бесконечный toggle цикл

Прочитал тут много тем, но нигде не встретил хотябы упоминания о тоггл цикле. Если что, извините за плохой поиск.
Цель такова: При нажатии(не удерживании) на хоткей выполняется бесконечный луп на сенд хоткей(тотже самый что нажимался) со слипом, значение слипа в переменной, переменная должна изменяться по средствам хоткеев на определенное значение(например нам1=парам:=1, нам2=парам:=2), надеюсь переменную можно изменять прямо во время выполнения лупа.. При повторном нажатии на тот же самый хоткей, что изначально нажимался, выполняется прирывание. Так же было бы не плохо если бы присутствовал хоткей на включение/отключение всего скрипта. Пожалуйста помогите.
И да, я даже не читал документацию, извинте, просто нет времени.

2

Re: AHK: Бесконечный toggle цикл

ratatata. пишет:

И да, я даже не читал документацию, извинте, просто нет времени.

ratatata., задача нашего форума — помощь в обучении программированию, а не безвозмездная помощь халявщикам. Нет времени — ради бога, в личку, платно.

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

3

Re: AHK: Бесконечный toggle цикл

teadrinker пишет:
ratatata. пишет:

И да, я даже не читал документацию, извинте, просто нет времени.

ratatata., задача нашего форума — помощь в обучении программированию, а не безвозмездная помощь халявщикам. Нет времени — ради бога, в личку, платно.

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

4

Re: AHK: Бесконечный toggle цикл

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

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

5

Re: AHK: Бесконечный toggle цикл

loop
{
send{hotkey}
sleep, % param
}

Чтото вроде этого

Извините за непонятные объяснения.

6

Re: AHK: Бесконечный toggle цикл

В первом сообщении много знакомых букв, но также много незнакомых слов.

7

Re: AHK: Бесконечный toggle цикл

ypppu пишет:

В первом сообщении много знакомых букв, но также много незнакомых слов.

Ну неужели я настолько непонятно и безграмотно написал

8

Re: AHK: Бесконечный toggle цикл

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

9

Re: AHK: Бесконечный toggle цикл

ratatata. пишет:

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

Тогда сделайте блок-схему или напишите на псевдокоде. Или хотя бы распишите задачу по пунктам. А то сейчас получается что-то типа этого.

10 (изменено: ratatata., 2011-09-30 04:03:09)

Re: AHK: Бесконечный toggle цикл

Александр_ пишет:
ratatata. пишет:

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

Тогда сделайте блок-схему или напишите на псевдокоде. Или хотя бы распишите задачу по пунктам. А то сейчас получается что-то типа этого.

Может быть странно, но я ее понял
1) При нажатии ( не удерживании ) хоткея(например alt+Lbutton) должен запуститья бесконечный цикл из отправки любого хоткея(ну например Lbutton).
2) Между отправкой этого хоткея должен находится sleep с переменным значением, это значение должно задаваться хоткеями которые будут присваивать ему эти значения ( например num1= переменное значение:=1 , num2= переменное значение:=2) Это все чтобы задать частоту отправки хоткея (Lbutton)
3)При повторном нажатии на хоткей, который нажимался в самом начале(alt+Lbutton), выполняется прирывание этого бесконечного цикла.
Это впринцепе все что мне нужно, но я незнаю только как создать toggle.
Toggle это когда у одной и той же команды имеется 2 функции.

Напишу пример toggle на консольном скриптинге counter-strike, например...

alias param1 "param2" - функция присвоения параметра param1 к параметру param2

alias toggle_duck "duck1" //присваеваем для toggle функцию duck1
alias duck1 "+duck; alias toggle_duck duck2" // присваеваем функции duck1 команду +duck и заменяем toggle на функцию duck2
alias duck2 "-duck; alias toggle_duck duck1" // присваеваем функции duck2 команду -duck и заменяем toggle обратно на функцию duck1
bind key "toggle_duck" // биндим тоггл на хоткей

Таким образом получается что при нажатии на хоткей(выполнении toggle) выполняется команда +duck, а при повторном нажатии(повторном выполнении toggle) команда -duck

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

11

Re: AHK: Бесконечный toggle цикл

ratatata. пишет:

1) При нажатии ( не удерживании ) хоткея(например alt+Lbutton) должен запуститья бесконечный цикл из отправки любого хоткея(ну например Lbutton).
2) Между отправкой этого хоткея должен находится sleep с переменным значением, это значение должно задаваться хоткеями которые будут присваивать ему эти значения ( например num1= переменное значение:=1 , num2= переменное значение:=2) Это все чтобы задать частоту отправки хоткея (Lbutton)
3)При повторном нажатии на хоткей, который нажимался в самом начале(alt+Lbutton), выполняется прирывание этого бесконечного цикла.
Это впринцепе все что мне нужно, но я незнаю только как создать toggle.
Toggle это когда у одной и той же команды имеется 2 функции.

В документации есть очень похожий пример #MaxThreadsPerHotkey. Я думаю проблем с пониманием не возникнет.

12

Re: AHK: Бесконечный toggle цикл

Александр_ пишет:
ratatata. пишет:

1) При нажатии ( не удерживании ) хоткея(например alt+Lbutton) должен запуститья бесконечный цикл из отправки любого хоткея(ну например Lbutton).
2) Между отправкой этого хоткея должен находится sleep с переменным значением, это значение должно задаваться хоткеями которые будут присваивать ему эти значения ( например num1= переменное значение:=1 , num2= переменное значение:=2) Это все чтобы задать частоту отправки хоткея (Lbutton)
3)При повторном нажатии на хоткей, который нажимался в самом начале(alt+Lbutton), выполняется прирывание этого бесконечного цикла.
Это впринцепе все что мне нужно, но я незнаю только как создать toggle.
Toggle это когда у одной и той же команды имеется 2 функции.

В документации есть очень похожий пример #MaxThreadsPerHotkey. Я думаю проблем с пониманием не возникнет.

Спасибо большое, помогло.
Возникло еще пара вопросов:
1) Как скомпилировать картинку в программу?

Gui,add,picture, C:\путь

Если картинка будет отсутствовать в C:\путь то и в скомпилированой программе ее не будет
2) Можно ли вместо текста кнопки поставить картинку, т.е. все пространство кнопки занять картинкой? или будет проще нарисовать картинку в виде кнопки, а действие задать координатами?

13

Re: AHK: Бесконечный toggle цикл

ratatata. пишет:

1) Как скомпилировать картинку в программу?

Gui,add,picture, C:\путь

Если картинка будет отсутствовать в C:\путь то и в скомпилированой программе ее не будет


FileInstall, filename.png, %A_TEMP%\filename.png, 1
 Gui, Add, Picture, x6 y6, %A_TEMP%\filename.png
ratatata. пишет:

2) Можно ли вместо текста кнопки поставить картинку, т.е. все пространство кнопки занять картинкой?

Насколько мне известно, нет.

ratatata. пишет:

или будет проще нарисовать картинку в виде кнопки, а действие задать координатами?

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

 Gui, Add, Picture, x6 y6 gMy_Sub, filename.png
. . .
My_Sub:
SoundBeep
Return

14

Re: AHK: Бесконечный toggle цикл

ratatata. пишет:

Прочитал тут много тем, но нигде не встретил хотябы упоминания о тоггл цикле.

Чем не переключение?

ratatata. пишет:

Так же было бы не плохо если бы присутствовал хоткей на включение/отключение всего скрипта.

F12:: ; I/O
   Suspend
   If (A_IsSuspended)
   {
      TrayTip,, now is suspended
      SoundBeep, 2500, 100
      Sleep, 50
      SoundBeep, 2500, 100
   }
   Else
   {
      TrayTip,, ready to work
      SoundBeep, 2500, 100
   }
   KeyWait, % A_ThisHotkey
   Return
ratatata. пишет:

И да, я даже не читал документацию, извинте, просто нет времени.

Зря.

ratatata. пишет:

...как это впринцепе делается, а именно синтаксис ахк...

ratatata. пишет:
Александр_ пишет:

В документации есть очень похожий пример #MaxThreadsPerHotkey.

Спасибо большое, помогло.

Ещё три примера для осознания синтаксиса:

SleepValue := 50

vk23::SleepValue := 50 ; num1

vk28::SleepValue := 500 ; num2

vk22::SleepValue := 1000 ; num3

Alt & LButton::
   CurrentCount++
   SetTimer, Counter, -0
   Return

Counter:
   If CurrentCount = 1
      SetTimer, Lable, -0
   Return

Lable:
   Loop
   {
      ToolTip, % "current iteration: "A_Index
             . "`npause value: "SleepValue
      Sleep, SleepValue
      If CurrentCount > 1
         Break
   }
   ToolTip
   CurrentCount :=
   Return
SleepValue := 50

vk23::SleepValue := 50 ; num1

vk28::SleepValue := 500 ; num2

vk22::SleepValue := 1000 ; num3

Alt & LButton::SetTimer, % (State := !State) ? "Label" : "Label2", -0

Label:
   CurrentCount++
   ToolTip, % "current iteration: "CurrentCount
          . "`npause value: "SleepValue
   Sleep, SleepValue
   If State
      Gosub, Label
   Else
      Gosub, Label2
Label2:
   ToolTip
   CurrentCount :=
   Return
SleepValue := 50

vk23::SleepValue := 50 ; num1

vk28::SleepValue := 500 ; num2

vk22::SleepValue := 1000 ; num3

#MaxThreadsPerHotkey, 2
Alt & LButton::Gosub, % (State := !State) ? "Label" : "Label2"
#MaxThreadsPerHotkey, 1

Label:
   While State
   {
      ToolTip, % "current iteration: "A_Index
             . "`npause value: "SleepValue
      Sleep, SleepValue
   }
Label2:
   ToolTip
   Return

15

Re: AHK: Бесконечный toggle цикл

ratatata. пишет:

2) Можно ли вместо текста кнопки поставить картинку, т.е. все пространство кнопки занять картинкой? или будет проще нарисовать картинку в виде кнопки, а действие задать координатами?

Можно, но в AHK наверно не предусмотрено. Нужно изменить стиль кнопки, потом загрузить картинку и установить эту картинку на кнопку. Сам не проверял, но должно сработать .

16 (изменено: ratatata., 2011-10-01 03:59:56)

Re: AHK: Бесконечный toggle цикл

Александр_, ypppu, спасибо.
Grey, спасибо, отличные примеры, лучше чем у меня вышли...

17

Re: AHK: Бесконечный toggle цикл

Александр_ пишет:

Можно, но в AHK наверно не предусмотрено. Нужно изменить стиль кнопки, потом загрузить картинку и установить эту картинку на кнопку. Сам не проверял, но должно сработать .

Проверил, вот простейший пример:

Unicode         := A_IsUnicode ? "W" : "A"
bmpname         := "D:\1.bmp" ; путь к битмапу
IMAGE_BITMAP    := 0
LR_LOADFROMFILE := 0x10
BM_SETIMAGE     := 0xF7
BS_BITMAP       := 0x80

LoadImage(hinst, Name, Type, cxDesired, cyDesired, fLoad)
; функция звгружает изображение и возвращает его хэндл
; hinst- дескриптор модуля, при загрузке из файла равен нулю
; Name- путь к файлу
; Type- тип изображения(битмап, курсор или иконка)
; cxDesired, cyDesired- ширина и высота
; fLoad- флаги, определяющие поведение функции, при загрузке из файла обязательно указать LR_LOADFROMFILE 
{
   global Unicode
   return DllCall("LoadImage" . Unicode,"int",hinst,"str",Name,"int",Type,"int",cxDesired,"int",cyDesired,"int",fLoad)
}

Gui, Add, Button, w200 h100 +%BS_BITMAP% Hwndhb0 GLoadImage, кнопка
hBitmap := LoadImage(0, bmpname, IMAGE_BITMAP, 200, 100, LR_LOADFROMFILE)
Gui, Show
return

LoadImage:
   if (img)
   {
      img := false
	  SendMessage BM_SETIMAGE, 0, 0,, ahk_id %hb0%
   }
   else
   {
      img := true
      SendMessage BM_SETIMAGE, 0, hBitmap,, ahk_id %hb0%
   }
return

При щелчке по кнопке на неё устанавливается картинка, при повторном убирается.