Карталинский форум
http://forum.kartaly.ru/

AutoIt3
http://forum.kartaly.ru/viewtopic.php?f=43&t=4501
Страница 1 из 2

Автор:  Amigo [ 24 окт 2010, 22:12 ]
Заголовок сообщения:  AutoIt3

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

Первый пример. Начнём с того, что команды выполняются последовательно.
1. Создание Gui (оболочки, окна) слишком просто
а) создаём окно GUICreate("My Program", 250, 260)
б) показываем окно GUISetState()
в) задаём цикл ожидания, иначе окно просто закроется, так как скрипт при выполнении команд прекращает работу.
Do
Until GUIGetMsg() = -3
команда GUIGetMsg() = -3 - срабатывание закрытия окна. GUIGetMsg() получение события от оболочки, -3 - код от кнопки закрытия.
Итого
Цитата:
GUICreate("My Program", 250, 260)
GUISetState ()
Do
Until GUIGetMsg() = -3

в четыре строки создаётся оболочка в которую можно добавлять кнопки и присоединять события (команды) к кнопке.

Скрипт не обязательно компилировать (делать EXE), его можно выполнить кликнув на нём (ассоциации прописываются при установке AutoIt3)

Автор:  Amigo [ 24 окт 2010, 22:45 ]
Заголовок сообщения:  Re: AutoIt3

Пример 2
Команда позволяет вывести сообщение, например о выполнение какой либо операции.
Цитата:
MsgBox(0, 'Сообщение', 'Привет')

Можно выполить скрипт только с этой командой и увидеть диалоговое окно. Во время вывода сообщения выполнение скрипта приостанавливается.

Пример 3
Создание кнопки
Цитата:
GUICreate("My Program", 250, 260)
$Button=GUICtrlCreateButton('Кнопка', 10, 10, 120, 22)
GUISetState ()
While 1
$msg = GUIGetMsg()
Select
Case $msg = $Button
MsgBox(0, 'Сообщение', 'Привет')
Case $msg = -3
Exit
EndSelect
WEnd

Здесь я изменил тип цикла While - WEnd, для опроса Gui (интерфэйса, оболочки) применил выбор Select - EndSelect
В цикле производится опрос оболочки GUIGetMsg() в переменную $msg. Если событие поступило и условие $msg = $Button верно, то есть от кнопки получено сообщение, то выполняется часть скрипта описанная между Case, в данном случае сообщение. Но часть скрипта может другой и кнопок сколько угодно, а значит задача состоит лишь в назначении кнопкам события выполняемого между Case.

Автор:  Amigo [ 24 окт 2010, 23:11 ]
Заголовок сообщения:  Re: AutoIt3

Пример 4
Показываем как легко добавлять новую кнопку, сравнивайте с предыдущим примером и станет ясно, как просто создать Gui (оболочку) со своими командами выполнения.
Цитата:
GUICreate("My Program", 250, 260)
$Button1=GUICtrlCreateButton('Кнопка', 10, 10, 120, 22)
$Button2=GUICtrlCreateButton('Ещё Кнопка', 10, 40, 120, 22)
GUISetState ()
While 1
$msg = GUIGetMsg()
Select
Case $msg = $Button1
MsgBox(0, 'Сообщение', 'Привет')
Case $msg = $Button2
GUICtrlSetData($Button2,'Текст изменён')
Beep(500, 1000)
Case $msg = -3
Exit
EndSelect
WEnd

Я добавил ещё одну кнопку, добавив индекс к переменной 1,2 и добавил событие в цикле, вернее два события. Первое меняет текст кнопки, второё выполняет сигнал Бип на системном динамике ПК.

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

Автор:  LeXorBuStErD [ 25 окт 2010, 10:31 ]
Заголовок сообщения:  Re: AutoIt3

а зачем фсё это?

Автор:  Amigo [ 26 окт 2010, 01:20 ]
Заголовок сообщения:  Re: AutoIt3

LeXorBuStErD
Риторический вопрос?

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

Пример 5
а)HotKeySet('{ESC}', '_funcname') - установка горячей клавиши ESC на вызов функции _funcname (имя любое)
б)While - открываем бесконечный цикл с паузой в секунду - Sleep(1000), далее WEnd конец цикла
в)Func _funcname() - функция, которая вызывается горячей клавишей, все что внутри неё будет выполнятся при вызове. В данном случае MouseMove(10, 10, 100) - эмуляция перемещения мыши в координаты 10х10 со скроростью 100.
Итого
Цитата:
HotKeySet('{ESC}', '_funcname')

While 1
Sleep(1000)
WEnd

Func _funcname()
MouseMove(10, 10, 100)
EndFunc

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

Автор:  LeXorBuStErD [ 27 окт 2010, 08:41 ]
Заголовок сообщения:  Re: AutoIt3

Amigo писал(а):
LeXorBuStErD
Риторический вопрос?

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

Пример 5
а)HotKeySet('{ESC}', '_funcname') - установка горячей клавиши ESC на вызов функции _funcname (имя любое)
б)While - открываем бесконечный цикл с паузой в секунду - Sleep(1000), далее WEnd конец цикла
в)Func _funcname() - функция, которая вызывается горячей клавишей, все что внутри неё будет выполнятся при вызове. В данном случае MouseMove(10, 10, 100) - эмуляция перемещения мыши в координаты 10х10 со скроростью 100.
Итого
Цитата:
HotKeySet('{ESC}', '_funcname')

While 1
Sleep(1000)
WEnd

Func _funcname()
MouseMove(10, 10, 100)
EndFunc

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


МАЛАДЕЦ а потом полочешьшь пожизненный перманентный бан в игрухе за ботоводство:)

Автор:  Slesar [ 27 окт 2010, 08:46 ]
Заголовок сообщения:  Re: AutoIt3

Читеров к стене, облить кислотой, и сжёчь :grr:

Автор:  Amigo [ 27 окт 2010, 15:33 ]
Заголовок сообщения:  Re: AutoIt3

LeXorBuStErD
Цитата:
МАЛАДЕЦ а потом полочешьшь пожизненный перманентный бан в игрухе за ботоводство:)

Не обманывай людей с которыми играешь и не получишь бан.

Автор:  LeXorBuStErD [ 27 окт 2010, 15:59 ]
Заголовок сообщения:  Re: AutoIt3

Amigo писал(а):
LeXorBuStErD
Цитата:
МАЛАДЕЦ а потом полочешьшь пожизненный перманентный бан в игрухе за ботоводство:)

Не обманывай людей с которыми играешь и не получишь бан.

:ROFL: бугога,

-Лекс как ты так быстро собираешь ресурсы?
-нуу Честно сказать скрипт написал, он за меня это делает
{персонаж был заблокирован (использование ботов)}


Примерно так я вижу всё что ты выше описал:)

Автор:  Amigo [ 27 окт 2010, 22:44 ]
Заголовок сообщения:  Re: AutoIt3

LeXorBuStErD
Любой программист понимает, что возможно написать скрипт на игру, всё зависит от человека. А не программист найдёт ботов в инете. Так что проблема человека, а не программирования. Скрипт не обязательно использовать в сетевых играх. Собирать ресурсы - тупое накопительство - отсутствие игрового процесса. Может к лучшему, что забанили, всё равно это уже была не игра. Если сам скрипт написал, то с пользой, научился программировать и избавился от тупизма накопителства в игре. Когда с друзьями играешь, так не вижу смысла в нечестной игре. А если слишком часто выигрываешь, то противник теряет интерес. Всё относительно, всё по ситуации.

Пример 6

Калькулятор
Как создать окно и кнопки я уже говорил, в калькуляторе появилось пару новых элементов.
1. GUICtrlCreateInput - создание поля ввода. Ничем не отличается от кнопки, кроме названия и отображения, также указываются координаты начала и ширина, высота.
2. Изменилось событие для кнопки. Между Case для события кнопки три строки, которые можно записать в одну строку, но это слегка запутает. Первая строка GUICtrlRead - чтение содержимого поля ввода в переменную $input0, во второй строке Execute - вычисление переменной $input0 и результат записать в переменную $input1, третья строка GUICtrlSetData - записать получившийся результат в тоже самое поле ввода.
Итого:
Цитата:
GUICreate("Калькулятор", 250, 70)
$Input=GUICtrlCreateInput('', 10, 10, 225, 22)
$Button=GUICtrlCreateButton('Вычислить', 170, 40, 70, 22)
GUISetState ()
While 1
$msg = GUIGetMsg()
Select
Case $msg = $Button
$input0=GUICtrlRead($input)
$input1=Execute($input0)
GUICtrlSetData($Input, $input1)
Case $msg = -3
Exit
EndSelect
WEnd

Теперь набираем в поле ввода любой математический пример для вычисления, например 4+5*2-3^2 получим 5 (символ ^ - возведение в степень). Калькулятор готов.

Автор:  Flat [ 27 окт 2010, 22:49 ]
Заголовок сообщения:  Re: AutoIt3

Amigo писал(а):
LeXorBuStErD
Любой программист понимает, что возможно написать скрипт на игру, всё зависит от человека. А не программист найдёт ботов в инете. Так что проблема человека, а не программирования. Скрипт не обязательно использовать в сетевых играх. Собирать ресурсы - тупое накопительство - отсутствие игрового процесса. Может к лучшему, что забанили, всё равно это уже была не игра. Если сам скрипт написал, то с пользой, научился программировать и избавился от тупизма накопителства в игре. Когда с друзьями играешь, так не вижу смысла в нечестной игре. А если слишком часто выигрываешь, то противник теряет интерес. Всё относительно, всё по ситуации.

Не обращай внимания на провокации, он просто геймер, к программированию отношения не имеет.

Автор:  LeXorBuStErD [ 28 окт 2010, 08:15 ]
Заголовок сообщения:  Re: AutoIt3

Flat писал(а):
Amigo писал(а):
LeXorBuStErD
Любой программист понимает, что возможно написать скрипт на игру, всё зависит от человека. А не программист найдёт ботов в инете. Так что проблема человека, а не программирования. Скрипт не обязательно использовать в сетевых играх. Собирать ресурсы - тупое накопительство - отсутствие игрового процесса. Может к лучшему, что забанили, всё равно это уже была не игра. Если сам скрипт написал, то с пользой, научился программировать и избавился от тупизма накопителства в игре. Когда с друзьями играешь, так не вижу смысла в нечестной игре. А если слишком часто выигрываешь, то противник теряет интерес. Всё относительно, всё по ситуации.

Не обращай внимания на провокации, он просто геймер, к программированию отношения не имеет.


я так и понял:)

Автор:  Amigo [ 07 дек 2010, 08:33 ]
Заголовок сообщения:  Re: AutoIt3

Пример 7

Несколько распостранённых команд, которые аналогично можно выполнить в *.cmd.
Цитата:
;1. Старт программы
Run('calc.exe')

;2. Завершить процесс (убить)
ProcessClose('calc.exe')

;3. Копировать файл
FileCopy('C:\boot.txt', 'D:\Temp\', 9)

;4. Удалить файл
FileDelete('C:\WINDOWS\*.log')

;5. Пинг хоста
Ping('178.50.76.4', 250)

;6. Завершить работу (2 - перезагрузить)
Shutdown(0)

;7. Выдвинуть или задвинуть лоток CD,DVD-привода.
CDTray('E:', 'open')
CDTray('E:', 'closed')

;8. Удалить каталог
DirRemove("C:\Temp", 1)

;9. Очистить корзину
FileRecycleEmpty()



Пример 8
Выполнить замену текста в файле.
Цитата:
;1. Открываем файл для чтения
$file = FileOpen('file.txt', 0)
;2. Читаем файл как обычный текст в переменную $text
$text = FileRead($file)
;3. Закрываем файл
FileClose($file)

;4. Выполняем замену текста, содержащегося в переменной $text и результат возвращаем в переменную $text.
$text=StringReplace($text, 'очепятка', 'опечатка')

;5. Сохраняем исправленный текст
;Открываем новый файл (можно в старый сохранить) с ключом 2, т.е. перезаписать
$file = FileOpen('file_New.txt',2)
;6. Записываем в файл текст из переменной $text
FileWrite($file, $text)
;7. Закрываем файл.
FileClose($file)

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

Автор:  LeXorBuStErD [ 07 дек 2010, 09:18 ]
Заголовок сообщения:  Re: AutoIt3

эт ты тут чё описываешь? познаём командную строку с самоучителем?

Автор:  Amigo [ 07 дек 2010, 10:00 ]
Заголовок сообщения:  Re: AutoIt3

Самое главное забыл, программную среду качать отсюда

Автор:  Amigo [ 10 дек 2010, 16:48 ]
Заголовок сообщения:  Re: AutoIt3

Пример 9
Как во многих языках для выполнения общеизвестных операций не требуется каждый раз переписывать алгоритм операций, а достаточно вызвать функцию, передав входные параметры, получив результат в переменную. К примеру File.au3 содержит набор функций файловых операций.

Цитата:
; Включаем пользовательские функции из File.au3
#include <File.au3>

; Вызываем диалог открытия папки и полученный им путь сохраняется в переменной $Path
$Path = FileSelectFolder ( 'Открыть','','',@WorkingDir)

; Если в диалоге выбрана "Отмена", то возвращается код ошибки и выполняется выход
If @error Then Exit

; Вызывается пользовательскай функция из включенной библиотеки File.au3, возвращающая список файлов
$FileList=_FileListToArray($Path,'*', 1)

; При ошибке или отсутствии файлов выдаётся сообщение и выполняется выход
If @Error Then
MsgBox (0,"","Файлов не найдено.")
Exit
EndIf

; При успешном выполнении предыдущих условий выполняем переименование файлов методом
; перемещения с присваиванием нового имени, без перезаписи.
For $i = 1 to $FileList[0]
FileMove($Path&'\'&$FileList[$i], $Path&'\New_'&$FileList[$i])
Next


Данный пример содержит макросовую переменную @error, которой присваивается значение после выполнения большинства функций. То есть возвращается код ошибки (успешно и неуспешно) предыдущей функции и соответственно последующее условие проверки прекращает операцию при неудаче.

Так же пример цикла For, смысл которого повторить операцию внутри цикла от 1 до указанного значения раз. В данном случае нулевая ячейка массива $FileList[0] содержит количество имён найденных файлов. В цикле можно выполнить любую файловую операцию, в том числе предыдущий пример 8 (поиск и замена текста), но теперь для всех файлов каталога.

Массив $FileList содержит имена файлов, а запись $FileList[$i] указывает на ячейку массива, в которой $i принимает поочерёдное значение при каждом шаге цикла. Соответственно в цикле происходит перебор ячеек массива, в каждой из которой найденые имена файлов.

Автор:  Amigo [ 16 фев 2011, 04:32 ]
Заголовок сообщения:  Re: AutoIt3

Сделал утильку для выполнения скриптов. Суть такова: копируем примеры, которые я здесь выложил и сохраняем в обычный текстовый документ, далее имя утильки и текстового файла делаем одинаковыми, далее запускаем утильку и она выполнит код текстового файла.
То есть можно программировать даже ничего не устанавливая и не регистрируя в реестре. Но на самом деле писать код в блокноте не совсем удобно, хотя бы потому, что в специализированном редакторе код имеет цветовую раскраску как в вышеприведённых примерах и автоподстановку готовых конструкций кода, аналогично как в редакторах HTML есть вставка тэгов.
Пример 7 не стоит выполнять, там перезагрузка, а пример 9 выдаст ошибку отсутствия файла File.au3, остальные примеры можно смело пробовать.

Автор:  Amigo [ 17 июл 2011, 18:20 ]
Заголовок сообщения:  Re: AutoIt3

Пример 10
Пример подключения к ФТП-серверу и получения списка файлов.

Цитата:
#include <FTPEx.au3> ; подключаем библиотеку ФТП функций
#include <Array.au3> ; подключаем библиотеку по работе массивов

$Path='Driver\Driver для ноутбука' ; путь на сервере ФТП
$server = '10.80.31.182' ; имя домена или IP
$username = 'anonymous' ; логин
$pass = 'ru@mail.ru' ; пароль

$Open = _FTP_Open('MyFTP') ; открываем сессию
$Conn = _FTP_Connect($Open, $server, $username, $pass) ; подключаемся к серверу
_FTP_DirSetCurrent($Conn, $Path) ; устанавливаем указанный каталог текущим
$aFile = _FTP_ListToArray($Conn, 2) ; получаем имена файлов
$Ftpc = _FTP_Close($Open) ; закрываем открытую сессию
_ArrayDisplay($aFile, 'Файлы') ; показываем список


При желании можно усложнить, например сравнить полученный список со списком от предыдущего посещения и выделить новые файлы, или добавить кнопку "Скачать" с использованием функции _FTP_FileGet.

Автор:  ANDROMED [ 31 мар 2012, 16:53 ]
Заголовок сообщения:  Re: AutoIt3

Amigo спс за статьи :) буду пробовать...

Автор:  Amigo [ 26 апр 2012, 18:16 ]
Заголовок сообщения:  Re: AutoIt3

Попробовал сделать пример работы с базой на SQLite используя функции AutoIt3 и запросы SQLite.

Скачать пример

Страница 1 из 2 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/