Автор Тема: [Мышь, клавиатура] непрерывный цикл с множественным условием внутри  (Прочитано 3556 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн D0R0T0N [?]

  • Новичок
  • *
  • Сообщений: 7
  • Репутация: 0
  • Пол: Мужской
    • Награды
здравствуйте. имею базовые знания в языках но с AutoIt сталкиваюсь впервые.

подскажите работает здесь условие типа Case ... Of ?

необходимо создать повторяющийся цикл, (например на нажатие клавиш 1,2,3,4,5 по очереди), с триггером учитывающим шаг цикла и соответственно меняющим на определенных шагах интервал нажатия.

вообщем получилось что-то типа этого

(нажмите для показа/скрытия)

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

как привести его в рабочий вид?
« Последнее редактирование: Май 13, 2013, 18:46:30 от D0R0T0N »

Русское сообщество AutoIt


Оффлайн inververs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 2085
  • Репутация: 451
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Case только в составе
Код: AutoIt [Выделить]
Select или Switch

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

Оффлайн D0R0T0N [?]

  • Новичок
  • *
  • Сообщений: 7

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
изменил как по учебнику скрипт
теперь он вида
(нажмите для показа/скрытия)

запускается, ошибок не выдает но не работает.

если убрать основную часть кода и поставить вместо нее просто несколько нажатий - прекрасно срабатывает

что еще нужно править?
« Последнее редактирование: Май 13, 2013, 18:47:02 от D0R0T0N »

Оффлайн inververs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 2085
  • Репутация: 451
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
я думаю вам нужно писать код в редакторе SciTe а не в блокноте, и проверять на синтаксис сперва.

Русское сообщество AutoIt


Оффлайн D0R0T0N [?]

  • Новичок
  • *
  • Сообщений: 7

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
так в нем и пишу - при запуске ошибок не выдает. но не работает все равно. синтаксис в порядке вроде. может где не заметил - ткните носом.

Оффлайн AZJIO [?]

  • VIP
  • *
  • Сообщений: 2706
  • Репутация: 1136
    • мой сайт
    • Награды
  • Версия AutoIt: 3.3.8.1
D0R0T0N
Код заключите в теги, третья кнопка в нижнем ряду. Что такое "$i_keypress div 6"? Может div это /
Если вы видите что цвет не соответствует зарегистрированным элементам то значит вы пишите неправильно.
Код: AutoIt [Выделить]
Send($i_keypress)

Код: AutoIt [Выделить]
If (Int($i_keypress / 6) = 1) Then


Оффлайн D0R0T0N [?]

  • Новичок
  • *
  • Сообщений: 7

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
поправил. все равно не робит. попытался написать аналогичную вещь но уже через массив и с ограниченным числом повторений - тоже самое запускается и только грузит проц а результата ноль.

(нажмите для показа/скрытия)

до меня только дошло - может send и sleep не работают с переменными?
просто когда указываю код кнопки или текст, без циклов и вычислений, он прекрасно его пишет

Оффлайн inververs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 2085
  • Репутация: 451
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
D0R0T0N
В SсiTe есть комбинация CTRL+F5 (проверка синтаксиса) нажмите. Дальше внизу откроется консоль, где буду все ошибки. А если у вас последняя версия, то  они же подсвется в тексте программы.

Русское сообщество AutoIt


Оффлайн D0R0T0N [?]

  • Новичок
  • *
  • Сообщений: 7

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
консоль была открыта с самого начала. при нажатии ctrl+f5 в консоли ничего не пишет.
при запуске скрипта пишет что ошибок не обнаружено и запускает. но результат при этом нулевой - только проц грузится и греется

такое ощущение что происходит зацикливание, только не понятно где
 
« Последнее редактирование: Май 13, 2013, 19:52:17 от D0R0T0N »

Оффлайн AZJIO [?]

  • VIP
  • *
  • Сообщений: 2706
  • Репутация: 1136
    • мой сайт
    • Награды
  • Версия AutoIt: 3.3.8.1
D0R0T0N

Подкорректировал. В Select нет оператора To, он есть только в Switch.

Код: AutoIt [Выделить]
HotKeySet("^{f11}", "_enable")
HotKeySet("^{f12}", "_disable")
HotKeySet("{Esc}", "_Exit")

Global $f_is_enabled = False
Global $i_interval = 0
Global $i_step = 0
; Global $a[5] = [1, 2, 3, 4, 5]

While 1
    If $f_is_enabled Then _Action()
    Sleep(10)
WEnd

Func _Action()
    For $y = 1 To 3
        For $x = 1 To 5
            Switch $i_step
                Case 0
                    $i_interval = 1000
                Case 1 To 5
                    $i_interval = 800
                Case 6 To 11
                    $i_interval = 600
                Case 12 To 15
                    $i_interval = 400
            EndSwitch
            ToolTip($i_step) ; вывод что работает
            Sleep($i_interval)
            $i_step += 1
            ; Send($a[$x])
            ; Send($x)
        Next
    Next
EndFunc   ;==>_Action

Func _enable()
    $f_is_enabled = True
    ToolTip('True') ; вывод что работает
EndFunc   ;==>_enable

Func _disable()
    $f_is_enabled = False
    ToolTip('False') ; вывод что работает
EndFunc   ;==>_disable

Func _Exit()
    Exit
EndFunc   ;==>_Exit


Цитировать
но результат при этом нулевой
имена триггеров то надо было назвать одинаково.

Оффлайн D0R0T0N [?]

  • Новичок
  • *
  • Сообщений: 7

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
большое спасибо - то-что-доктор-прописал ;D
единственное но -> во время исполнения цикла его прерывание не сразу срабатывает - приходится несколько раз долбить кнопку
изза чего потом в памяти остается зажатая ctrl даже если закрыть скрипт. решается нажатием пару раз ctrl+tab.
« Последнее редактирование: Май 13, 2013, 23:01:18 от D0R0T0N »

Оффлайн Naisho [?]

  • Новичок
  • *
  • Сообщений: 85
  • Репутация: 12
    • Награды
D0R0T0N
попробуйте добавить в конец функций "_enable" и "_disable" :
Код: AutoIt [Выделить]
ControlSend("", "", "", "text", 0)

Возможно ситуация с залипаниями облегчится

Оффлайн D0R0T0N [?]

  • Новичок
  • *
  • Сообщений: 7

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
только левый перестал залипать

прерывание не срабатывает сразу. 100500+ кнопок нажимает прежде чем прерывается цикл

лучший выход на мой взгляд это полное отключение реализованое через esc

Оффлайн AZJIO [?]

  • VIP
  • *
  • Сообщений: 2706
  • Репутация: 1136
    • мой сайт
    • Награды
  • Версия AutoIt: 3.3.8.1
D0R0T0N
Цитировать
лучший выход на мой взгляд это полное отключение реализованое через esc
При переключении триггера не гарантируется остановка функции, так как в ней 15 шагов цикла да ещё с ожиданием 1 сек, в итоге функция остановится через 15 сек после вызова? так что лучший выход остановить функцию - добавить проверку триггера внутри функции в каждом шаге цикла.

Залипание: http://autoit-script.ru/index.php/topic,9619.0.html поиск рулит.

Русское сообщество AutoIt


 

Похожие темы

  Тема / Автор Ответов Последний ответ
15 Ответов
21828 Просмотров
Последний ответ Декабрь 06, 2009, 18:26:22
от CreatoR
5 Ответов
3205 Просмотров
Последний ответ Август 29, 2011, 11:24:30
от Yashied
3 Ответов
1684 Просмотров
Последний ответ Март 19, 2012, 14:02:32
от Sidi
2 Ответов
2010 Просмотров
Последний ответ Апрель 15, 2012, 21:50:59
от Krokodile
2 Ответов
1141 Просмотров
Последний ответ Январь 25, 2013, 18:27:54
от Rivald
1 Ответов
1568 Просмотров
Последний ответ Август 12, 2013, 15:24:47
от Belfigor
1 Ответов
1079 Просмотров
Последний ответ Декабрь 28, 2013, 20:55:50
от ivsatel
5 Ответов
1254 Просмотров
Последний ответ Август 23, 2015, 13:45:04
от bobuni
2 Ответов
579 Просмотров
Последний ответ Декабрь 22, 2015, 19:44:20
от Arbios
5 Ответов
972 Просмотров
Последний ответ Январь 10, 2017, 14:10:19
от InnI