Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: vasyapro on October 09, 2016, 03:33:59 PM
-
Уже давно пользуюсь фичей зажатия клавиш мышки с помощью одноразового однострочного скрипта. После выполнения клавиша мышки остаётся зажатой, а пальца на мышке нету. Полезно когда надо долго держать, и пальцы не устают. А если надо отжать, то достаточно вручную нажать клавишу и она отожмется.
Понадобилось сделать то же самое с клавишами на клавиатуре, но не работает.
waitms(500) //что бы не среагировало на хокей запуска
getkeysdown($arr) //не знаю как отреагирует кликер на проверку в while если $arr до этого не объявлена
While($arr ! 0) //не for потому что $arr = $arr[0], а я всё равно лишь одну кнопку буду нажимать
getkeysdown($arr)
end_cyc
wait(1) //что бы успел отжать клавишу
keydown($arr)
Вообще никакой реакции от KeyDown, даже если добавить в конце wait(1). Print($arr) в конце выдаст нормальный код клавиши.
-
Задержки в цикле были бы не лишними, а то кликер будет напрягать процессор по чем зря. 20 мс вполне достаточно.
Объявлять переменные в кликермане не требуется, он сам это сделает при необходимости.
У тебя происходит зажатие после чего скрипт начинается за ново и функция видит зажатую клавишу, цикл пропускается и клавиша снова зажимается, вот такая круговерть. Для отключения зажатия по любому придется использовать какую то другую клавишу.
вот рабочий скрипт
WAITMS(500) // пауза чтоб не сработал на клавиши запуска
WHILE(1) // бесконечный цикл
GETKEYSDOWN($keys) // анализ зажатых клавиш
IF(ARRSIZE($keys) > 0) // если массив не пуст
IF(($keys[0]!#ESC)&($keys[0]!1)&($keys[0]!2)&($keys[0]!3)) // здесь исключаем некоторые клавиши (ESC и клавиши мыши)
BEEP(1000,200) // сигналим (необязательно)
WHILE(ISKEYDOWN($keys[0])=1) // ждем пока клавишу отпустят
WAITMS(5)
END_CYC
KEYDOWN($keys[0]) // зажимаем эту клавишу
WHILE(ISKEYDOWN(#ESC)=0) // отпускание поставим на клавишу ESC (ждем нажатия)
WAITMS(20)
END_CYC
WAITMS(300)
KEYUP($keys[0]) // отпускаем
BEEP(800,200) // сигналим (необязательно)
END_IF
END_IF
WAITMS(20) // общая задержка для разгрузки процессора
END_CYC
-
Вы не так меня поняли. Скрипт выполняется лишь один раз, что бы отправить в систему сообщение о том, что клавиша была зажата, а сообщения о отжатии нету, в результате чего клавиша остаётся зажатой всегда. После этого скрипт заканчивается и про кликер мы забываем. При ручном нажатии в систему опять отправляется сообщение о том, что клавишу зажали(но она была зажата кликером до этого, так что ничего не меняется), а вот при ручном отжатии клавиша наконец то вырубается.
Суть в том, что при использовании L(R)Down такой подход работает, а вот с KeyDown нет. То есть, скрипт состоящий из одной строки:
LDown($_xmouse,$_ymouse)
выполненный лишь один раз зажимает ЛКМ до тех пор, пока она не будет нажата и отжата вручную. А вот этот код:
KeyDown(#A)
такого результата не даст. В блокноте будет лишь одна буква А.
Задержки в цикле были бы не лишними, а то кликер будет напрягать процессор по чем зря. 20 мс вполне достаточно.
Скрипт на три секунды максимум, сомневаюсь что процессор сгорит за это время.
Объявлять переменные в кликермане не требуется, он сам это сделает при необходимости.
Будет ли переменная объявленная кликером в условии равна нулю?
-
В старых версиях кликер действительно не отжимал зажатые в ходе выполнения клавиши. Теперь при остановке он отжимает все клавиши клавиатуры чтобы не осталось залипших клавиш. Странно что это не относится к мыши.
Переменная объявляется с 0 об этом написано в справке.
-
Чёрт. То есть я всё это время использовал баг и случайно репортнул его?
-
KeyDown(#A)
такого результата не даст. В блокноте будет лишь одна буква А.
При зажатии клавиш кликером в блокноте не будет AAAAAA, повторы инициирует сама клавиатура.
-
Чёрт. То есть я всё это время использовал баг и случайно репортнул его?
Ну не баг а скорее недоработка.
-
При зажатии клавиш кликером в блокноте не будет AAAAAA, повторы инициирует сама клавиатура.
Какой тогда вообще смысл в KeyDown?
-
При зажатии клавиш кликером в блокноте не будет AAAAAA, повторы инициирует сама клавиатура.
Какой тогда вообще смысл в KeyDown?
Ну например в игре KeyDown(#W) заставит персонажа бежать вперед.
А для повторения команд есть цикл For
-
Какой тогда вообще смысл в KeyDown?
Задавать свою задержку между нажатием-отжатием чтобы прога успевала всё правильно обрабатывать.