как зациклить скрипт ahk
AHK: Скрипт для зацикливания клавиш
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Сообщения 7
1 Тема от Gutalin 2018-01-23 00:14:28 (изменено: Gutalin, 2020-02-24 20:02:39)
Тема: AHK: Скрипт для зацикливания клавиш
В прикреплённом архиве содержится скомпилированный скрипт и 2 картинки замка для не скомпилированного кода (картинки скопировать в %A_Temp%\Биндик\).
Если вы работаете с ahk файлом:
1)Создайте папку;
2)Переместите в неё ahk файл данного скрипта;
3)Поместите туда же библиотеку для Hotkey от serzh82saratov версии 2.06 под названием Hotkey.ahk ;
В скомпилированной версии (exe файл) данной процедуры проводить не нужно!
ini файл хранит в себе настройки программы и находится в директории(папке) со скриптом. Чтобы настройки не сбросились его лучше не удалять!
v0.1 (08.08.18)
— Ini файл создаётся сам, если его нет;
— Ini файл можно перезаписать.
v0.2 (09.08.18)
-Убраны кнопки «+» и «-» для большей стабильности (Всегда отображается возможность выбрать 2 кнопки);
-Скрипт сам определяет нажатые кнопки.
v0.3 (10.08.18)
-Убраны лишние строки из кода;
-Использована библиотека для Hotkey от serzh82saratov;
-Убраны кнопки «Сохранить» и «Отмена». Теперь всё сохраняется во время ввода данных.
v0.5 (12.08.18)
-Добавлена блокировка ввода (вкл\выкл на замочек);
-Улучшение самого кода;
-Мелкие улучшения интерфейса.
v1.0 (14.08.18)
-Доработан скрипт зацикливания для сочетаний клавиш.
-Мелкие улучшения интерфейса.
v1.2 (16.08.18)
-Добавлена возможность ставить на паузу;
-Убран значок в трее за ненадобность;
-Добавлен индикатор работы скрипта. (Поверх всех окон);
-Убрана возможность блокировки ввода во время работы скрипта (после нескольких вкл\выкл скрипта он зависал).
v1.3 (17.08.18)
-Добавлена возможность вкл\выкл индикатор в меню Помощь>Настройки;
-Меню «Сбросить ini файл» перенесено в Помощь>Настройки;
-Мелкие улучшения интерфейса.
v1.4 (20.08.18)
-Исправления в работе скрипта;
-Вернулась блокировка ввода;
V1.5(01.12.18)
-Улучшение ввода значения задержки;
-Добавлена возможность настройки зацикливания в определённое окно;
-Небольшие изменения интерфейса.
V1.6(03.04.19)
-Добавлена возможность изменения размера индикатора работы скрипта;
-Изменено расположение ini файла (теперь в директории скрипта);
-Отказ от интеграции в код простым копированием библиотеки Hotkey.ahk от serzh82saratov. Теперь это работает как и должно подразумеваться;
-Отформатирован код с целью улучшить его читаемость (может и до переменных дойду);
V1.7(04.04.19)
-Исправление багов;
-Улучшение интерфейса;
v1.8(24.02.2020)
-Новый интерфейс настроек;
-Добавлена возможность самому задать клавиши Старт/Стоп/Выход из программы;
-Добавлена возможность более точно настроить время;
-Убрана пауза;
2 Ответ от svoboden 2018-01-23 00:28:06 (изменено: svoboden, 2018-01-23 03:24:31)
Re: AHK: Скрипт для зацикливания клавиш
Забыли Readme.txt еще написать. А если серьезно, то для новичка, наверное, будет полезна данная высокоинтеллектуально развитая программа.
3 Ответ от Gutalin 2018-01-23 00:31:57 (изменено: Gutalin, 2018-08-12 21:11:16)
Re: AHK: Скрипт для зацикливания клавиш
svoboden, если кто не хочет изучать AHK, а просто зациклить пару клавиш. Правда моя программа очень, очень узко раскрывает функционал AHK, но для единичного дела подойдёт.
4 Ответ от stealzy 2018-01-23 17:08:49 (изменено: stealzy, 2018-01-23 17:26:43)
Re: AHK: Скрипт для зацикливания клавиш
Поставить таймер на отправку неких клавиш можно так:
Если делать с возможностью отключения таймера и установки горячих клавиш код становится сложнее, потому что надо сохранять состояния и проверять их.
Курс по AutoHotKey #5 | Циклы.
Lance Whisky
Информационные технологии Diamond RP
Привет, я бы хотел сегодня поговорить про довольно важную тему. В языках программирования циклы используют для упрощения большого, но одинакового кол-ва строк кода. Другими словами, цикл будет работать до тех пор, пока вы его сами не остановите. Как заставить это работать?
В данном случаи, код будет выполнен до тех пор, пока не насчитает 10. Всё просто. Вы просто пишите кол-во кругов после цикла.
В АНК существует так называемые метки. Это как сохранение в компьютерной игре.
Вы можете поставить в любом месте кода метку, и по нажатию клавиши, или по-другому, вернуться на это место.
Чтобы установить метку, нужно назвать её и поставить одно двоеточие, а, чтобы попасть на метку, используйте функцию goto * название метки * ( на метки нет ограничений )
Вот пример цикла, с помощью меток.
Но заметьте, что A_Index там уже не работает, можно использовать переменные, я думаю вы их ещё помните.
Циклы можно использовать много где, в оптимизации например, так делали раньше флудеры всякие. Замечу ещё, что я не использовал var как глобальную переменную, как вы помните зона видимости позволяет достать до этого момента.
1 Задание: Сделайте окно, которое будет считать до 10, в чате сампа, красным цветом. Методом Loop’a.
2 Задание: Сделайте цикл методом меток, и после того, как переменная будет ровняться 14, ваша программа будет закрываться. )
Исходник Гайд AUTOHOTKEY | Loop, * | Циклы
BASS_DEVSOFTWARE
Малость теории: циклом может называться любая многократно исполняемая последовательность инструкций, организованная любым способом.
Закончили теорию.
Цикл заключаем в < и >скобки, выглядит это дело примерно так:
Loop, Read лучший аналог FileReadLine, так как первый вариант один раз открывает файл и держит его открытым во время цикла, в отличии от второго, который открывает, читает и закрывает.
Строка выглядит таким образом:
Читаемый файл так же можно указать в виде переменной.
Во время работы цикла, читаемые строки содержатся в переменной цикла %A_LoopField%.
Чтение под строк через Loop, Parse
Loop, Parse позволяет читать содержимое каждой строки через разделители и убирать неугодные нам слова/символы, если нам это нужно.
Рассмотрим простой пример:
Название файла цикла помещено в переменную A_LoopFileName
Loop, FilePattern позволяет вычислять размер файла, дату изменения, дату последнего запуска и т.д. Больше в таблице ниже:
1.txt. Однако, если FilePattern содержит не абсолютный, а относительный путь, то путь здесь тоже будет относительным.
Визуально представим нашу папку, в ней будут следующие файлы:
Цикл с условием, я говорю о While-Loop
В цикле можно указать любое условие или функцию.
For Key, Value in Expression
For loop позволяет нам обрабатывать условие в цикле с несколькими переменными.
Содержание переменных остаётся неизменными, во время работы цикла.
Ниже представлю таблицу с переменными, которые существуют в цикле:
Метка должна быть непосредственно В цикле или НАД ним.
Пример, который может наглядно показать суть и применение continue и break.
На этом, пожалуй, мы закончим.
Отдельная благодарность ресурсу ahk-wiki.ru за помощь.
@arsh12344
Добавлен пример для For, Loop
@Belo4ka_belka
Помощь с табуляцией и For, Loop
Спасибо вам огромное!
Любые вопросы можете задавать в данной теме и просьба БЛАГОДАРИТЬ тех, кто вам поможет своим ответом.
AHK: Включение/выключение цикла на одну кнопку.
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Сообщения 16
1 Тема от Lanceg 2013-08-06 17:41:20 (изменено: Lanceg, 2013-08-06 21:31:53)
Тема: AHK: Включение/выключение цикла на одну кнопку.
В сети нашел этот код:
Но он не работает, как более ‘тонко’ сделать код для микрофона?
2 Ответ от Irbis 2013-08-06 18:26:06 (изменено: Irbis, 2013-08-06 18:29:23)
Re: AHK: Включение/выключение цикла на одну кнопку.
Первое. При нажатии на хоткей скрипт не «возвращается к началу», а встает на паузу, что в данном случае роли не играет:
Насчет микрофона не могу подсказать, пример верный, в справке практически такой же, но он и у меня не работает.
3 Ответ от Lanceg 2013-08-06 18:46:30 (изменено: Lanceg, 2013-08-06 18:47:05)
Re: AHK: Включение/выключение цикла на одну кнопку.
Через паузу и суспенд не вариант, я еще несколько макросов и кучу хоткеев использую одновременно с ним, необходим переключатель на одну кнопку, вот пример для двух кнопок:
4 Ответ от serzh82saratov 2013-08-06 19:12:50 (изменено: serzh82saratov, 2013-08-06 19:46:21)
Re: AHK: Включение/выключение цикла на одну кнопку.
Включение/выключение цикла на одну кнопку
2 вариант, если MaxThreadsPerHotkey мешает:
5 Ответ от serzh82saratov 2013-08-06 20:42:00 (изменено: serzh82saratov, 2013-08-06 21:29:53)
Re: AHK: Включение/выключение цикла на одну кнопку.
Также если не нужна высокая частота повторений, можно иммитировать цикл:
6 Ответ от Lanceg 2013-08-06 21:43:46 (изменено: Lanceg, 2013-08-06 21:45:05)
Re: AHK: Включение/выключение цикла на одну кнопку.
Мне необходима гибкость скрипта, сделать код вкл/выкл. именно вот для такого цикла:
Скрипты выше не подходят вроде бы, либо подходят, но я не вижу сходства с работой моего цикла, мне не нужны постоянные повторения, нужно в пределах интервала рандома задать эти нажатия кнопки Т, к тому же было бы неплохо если сам скрипт вкл и выкл на эту же кнопку Т, но можно сделать и на другую, главное чтобы была задействована клавиша Т и выполнялся цикл который я показал, либо аналогичный или схожий, с возможностью динамической настройки.
Моих знаний в кодинге не хватает для построения такого кода, я дилетант
7 Ответ от serzh82saratov 2013-08-06 21:48:17
Re: AHK: Включение/выключение цикла на одну кнопку.
В любом примере замените ToolTip % A_TickCount на своё:
неплохо если сам скрипт вкл и выкл на эту же кнопку Т
8 Ответ от Lanceg 2013-08-06 22:21:15 (изменено: Lanceg, 2013-08-06 22:25:20)
Re: AHK: Включение/выключение цикла на одну кнопку.
Забыл уточнить одну маленькую деталь, из-за которой, кажется, все не работает так как нужно:
Пытаюсь подстроить луп под разный код выше, безрезультатно.
Напишу еще раз, как должно это происходить:
После физического нажатия T, запускается цикл имитации нажатия этой кнопки с рандомной задержкой, при повторном физическом нажатии на Т, подпрограмма перестает исполнять цикл, до повторного запуска.
Если такой вариант невозможен, можно заменить запуск и выключение подпрограммы на другую кнопку, например Y.
Посылает нажатия клавиш и щелчки мыши в активное окно.
Параметры
Keys | Последовательность посылаемых клавиш. Как и в других командах, запятая перед первым параметром необязательна. |
Режим Raw (как есть): Команда SendRaw посылает клавиши в точности как они указаны, т.е. не преобразует
Нормальный режим: В этом режиме нижеследующие символы интерпретируются как модификаторы (они модифицируют только идущую непосредственно за ними клавишу).
#: Посылает нажатие Win, т.е. Send #e нажмёт клавишу Windows и, удерживая её, нажмёт клавишу «e».
SendInput и SendPlay [с версии 1.0.43]: SendInput и SendPlay используют тот же синтаксис, что и Send, но работают, как правило, быстрее и более надёжно. Кроме того они буферизуют физические нажатия на клавиши и кнопки мыши, которые происходят во время посылки, что не позволяет нажатиям пользователя смешиваться с теми, которые посылает скрипт. С помощью команды SendMode можно сделать команду Send синонимом SendInput или SendPlay. Более детальное описание каждого из режимов смотрите в разделах SendInput и SendPlay ниже.
SendEvent [с версии 1.0.43]: SendEvent использует для посылки тот же метод, что и команда Send в версиях до 1.0.43. Скорость посылки нажатий задаётся командой SetKeyDelay. По умолчанию, Send является синонимом SendEvent, но может быть сделана синонимом SendPlay или SendInput с помощью команды SendMode.
Имена клавиш. В списке ниже перечислены имена специальных клавиш, которые можно посылать (каждое имя должно заключаться в фигурные скобки).
Имя клавиши | Результирующее нажатие |
---|---|
Функциональные клавиши. Например, | |
! | |
# | |
+ | |
^ | |
< | |
<>> | > |
ENTER на основной клавиатуре | |
ESCAPE | |
Пробел (такое обозначение нужно только для пробелов в начале или конце строки, пробелы в середине могут быть обычными) | |
TAB | |
Backspace | |
Delete | |
Insert | |
Стрелка вверх на основной клавиатуре | |
Стрелка вниз на основной клавиатуре | |
Стрелка влево на основной клавиатуре | |
Стрелка вправо на основной клавиатуре | |
Home на основной клавиатуре | |
End на основной клавиатуре | |
Page Up на основной клавиатуре | |
Page Down на основной клавиатуре | |
CapsLock (использование команды SetCapsLockState более надёжно в NT/2k/XP) | |
ScrollLock (см. также SetScrollLockState) | |
NumLock (см. также SetNumLockState) | |
CONTROL (посылается код нейтральной виртуальной клавиши и левый сканкод) | |
Левый CONTROL (то же, что CONTROL в Win9x, но в NT/2k/XP будет послан код левой виртуальной клавиши) | |
Правый CONTROL | |
Нажимает и удерживает CONTROL пока не будет послан | |
ALT (посылается код нейтральной виртуальной клавиши и левый сканкод) | |
Левый ALT (то же, что ALT в Win9x, но в NT/2k/XP посылается код левой виртуальной клавиши) | |
Правый ALT (или AltGr, в зависимости от раскладки клавиатуры) | |
Нажимает и удерживает ALT пока не будет послан | |
SHIFT (посылает код нейтральной виртуальной клавиши и левый сканкод) | |
Левый SHIFT (то же, что SHIFT в Win9x, но в NT/2k/XP посылается код левой виртуальной клавиши) | |
Правый SHIFT | |
Нажимает и удерживает SHIFT пока не будет послан | |
Левая клавиша Windows | |
Правая клавиша Windows | |
Нажимает и удерживает левую клавишу Windows пока не будет послан | |
Нажимает и удерживает правую клавишу Windows пока не будет послан | |
Клавиша контекстного меню | |
Клавиша SLEEP | |
Посылает комбинацию Alt с кодом символа (набираемого на цифровой клавиатуре), которая может быть использована для генерации символов, которые не существуют на клавиатуре. Чтобы сгенерировать символы ASCII, используйте коды от 1 до 255. Для символов ANSI (стандарт для большинства языков) используйте коды от 128 до 255, но добавьте в начало 0, например Для символов Unicode указывайте коды от 256 до 65535 (без нуля в начале). Однако это поддерживается не всеми приложениями. Поэтому для большей совместимости и упрощения посылки длинных строк в Unicode используйте команду Transform Unicode. | |
Посылает нажатие, которое имеет код виртуальной клавиши XX и сканкод YYY. Например: Send | Режим Blind внутренне используется при переназначении клавиш. Например, переназначение a::b будет выдавать: 1) «b», когда вы нажмёте «a»; 2) «B» при нажатии «A» (в верхнем регистре); 3) Control-B при нажатии Control-A. |
[с версии 1.0.43] | Посылает строку буквально как она есть, т.е. не преобразует |
Повтор или удержание клавиши
Чтобы повторить нажатие несколько раз, заключите в фигурные скобки имя клавиши и число повторов. Например:
Чтобы удерживать нажатой или отпустить клавишу, поместите в фигурные скобки её имя и слово Down (вниз) или Up (вверх). Например:
Когда клавиша удерживается вышеописанным методом, не происходит её автоповтор, как это было бы при физическом удержании (причина в том, что автоповтор является возможностью драйвера/оборудования). Однако для симуляции автоповтора можно использовать Loop. Следующий пример посылает 20 нажатий Tab:
Вместо Down также можно использовать DownTemp. Эффект будет тот же, за исключением клавиш-модификаторов (Control/Shift/Alt/Win). В последнем случае DownTemp сообщает следующим за ним посылающим командам, что модификаторы не являются постоянно нажатыми, т.е. они могут отпускаться, если это нужно. Например, если за командой Send
Общие замечания
В добавок к буквам от A до Z, также поддерживаются следующие буквы и символы (однако, если кодовая страница вашей системы отлична от 1252 [США и Западная Европа], этот список может быть иным):
BlockInput в сравнении с SendInput/SendPlay: Хотя команда BlockInput может быть использована для защиты симулируемых скриптом нажатий от прерывания физическими нажатиями, производимыми пользователем, для этой цели часто лучше использовать SendInput или SendPlay. Их преимущество в том, что они не отбрасывают то, что печатает пользователь во время посылки; его нажатия запоминаются и посылаются позже.
Если нужно послать большое количество нажатий, их можно поместить в секцию продолжения, чтобы улучшить читабельность скрипта.
Поскольку операционная система не позволяет симуляцию комбинации CTRL-ALT-DELETE, команды вроде ^!
SendInput [с версии 1.0.43]
SendInput, как правило, является предпочтительным способом посылки нажатий благодаря его высокой скорости и надёжности. В большинстве случаев SendInput работает почти мгновенно даже при посылке длинных строк. Благодаря своей скорости он более надёжен, поскольку при этом снижается вероятность того, что какое-то другое окно выскочит неожиданно на первый план и перехватит посылаемые нажатия. Надёжность повышает и тот факт, что все физические нажатия пользователя во время посылки запоминаются и посылаются позже.
Если какой-то другой скрипт (не тот, где выполняется SendInput) установил низкоуровневый хук клавиатуры, SendInput автоматически переключается в SendEvent (или в SendPlay, если действует команда SendMode InputThenPlay). Это делается потому, что присутствие внешнего хука сводит на нет все преимущества SendInput, делая его хуже как SendPlay, так и SendEvent. Однако поскольку SendInput не способен обнаруживать низкоуровневые хуки, установленные другими программами, а только AutoHotkey с версии 1.0.43, в этих случаях он не будет переключаться, что сделает его менее надёжным, чем SendPlay/Event.
Когда SendInput посылает щелчки мыши способами вроде
SendPlay [с версии 1.0.43]
Наибольшее преимущество SendPlay заключается в его способности взаимодействовать с более широким спектром игр. Например, какая-либо игра может принимать строки автозамены, только если они имеют опцию SendPlay.
Из трёх режимов посылки, SendPlay самый необычный, так как он не симулирует нажатия и щелчки как таковые. Вместо этого он создаёт последовательность событий (сообщений), которые идут напрямую активному окну (наподобие ControlSend, но на более низком уровне).
Как и у SendInput, нажатия SendPlay не смешиваются с теми, что производит пользователь. Нажатия пользователя запоминаются и посылаются позже.
SendPlay неспособен вызывать срабатывание системных горячих клавиш, использующих клавиши Windows (LWin и RWin). Например, он не может вызвать Главное меню или открыть диалог «Выполнить» через Win-R.
Клавиши Windows (LWin и RWin) автоматически блокируются во время SendPlay, если установлен хук клавиатуры. Это предотвращает появление Главного меню, если пользователь случайно нажмёт клавишу Windows во время посылки. Другие клавиши не нуждаются в такой блокировке, поскольку операционная система буферизует их нажатия до момента окончания SendPlay.
SendPlay не использует стандартные настройки SetKeyDelay и SetMouseDelay. По умолчанию, задержки у него отсутствуют вообще. Как их можно изменить, показано в примерах ниже:
SendPlay не может включать и выключать CapsLock, NumLock и ScrollLock. Также он не может изменить состояние клавиш, которое считывается через GetKeyState, разве только нажатия посылаются в какое-либо из окон самого скрипта. Даже в этом случае изменения состояний левых и правых клавиш-модификаторов (например, RControl) могут быть считаны только через их нейтральный вариант (например, Control). SendPlay также имеет и другие ограничения, о которых рассказано в описании команды SendMode.
В отличие от SendInput и SendEvent, пользователь может прервать работу SendPlay, нажав Control-Alt-Del или Control-Escape. Когда такое происходит, оставшиеся нажатия не посылаются, но скрипт продолжает выполняться, как если бы SendPlay завершился нормально.
Хотя SendPlay может посылать события LWin и RWin, но они посылаются в активное окно и не выполняют своей обычной функции в операционной системе. Чтобы обойти это, используйте SendEvent. Например, команда SendEvent #r вызовет диалог «Выполнить».