Polygon51 Script Language - скриптовый язык интерпретируемого типа, предназначенный для автоматизации некоторых действий пользователя. Крайне прост в освоении, исходный код хранится в виде файлов в текстовом формате с расширением .p51s. Для выполнения скриптов (макросов) используются возможности программы POLYGON51 AGENT версии 2.1.0.0 или выше.
При написании скрипта нужно учитывать следующие моменты: - Каждую команду (оператор) следует записывать с новой строки. Параметры команды (операнды) следует указывать, отделяя их друг от друга и от самой команды одним пробелом в порядке, определённом синтаксисом команды; - Язык P51SL не чувствителен к регистру; Запись операторов можно производить любыми символами (строчными или прописными). Однако каждое слово рекомендуется начинать с заглавной буквы, т. к. это повышает наглядность языковых конструкций; - Оператор автозапуска скрипта обязательно должен располагаться в самом начале листинга скрипта, в первой строке. В ином случае он обработан не будет; - Скрипт, запускаемый автоматически с помощью одного из соответствующих операторов или с помощью нажатия комбинации "горячих клавиш" CTRL+B, обязательно должен располагаться в виде файла в папке программы POLYGON51 AGENT и носить имя POLYGON51SCRIPT.p51s. Аналогичным образом сохраняются скрипты, записанные Агентом в автоматическом режиме с помощью комбинации клавиш CTRL+R; - Оператор цикла (BeginRepeat/EndRepeat) следует использовать с осторожностью! Используйте Sleep x для замедления выполнения итераций и небольшие числа в качестве счётчиков при тестировании работы скрипта! - Пустые строки, строки комментариев и строки с неопознанными конструкциями Агент пропускает при выполнении и переходит к нижеследующим; - Некоторые операторы (например, Reboot/ShutDown) не обрабатываются внутри конструкции BeginRepeat/EndRepeat; - При обнаружении синтаксической ошибки при выполнении скрипта Агент выдаст соответствующее сообщение и прекратит его выполнение.
Операторы (команды) языка и их параметры (аргументы)
Операторы автозапуска скрипта
Приведенные ниже инструкции отвечают за автоматический запуск скрипта на выполнение при различных условиях. ВАЖНО – одновременно допускается использование только одной из инструкций автозапуска, при этом она должна находиться исключительно в первой строке.
AutoExec - мгновенный запуск скрипта на выполнение при загрузке программы. Указание параметров не требуется. RealTimeExec хх:хх:хх - запуск скрипта в заранее определённое время (реальное). Время необходимо указывать в формате часы:минуты:секунды. IdleTimeExec х - запуск скрипта при таймауте простоя системы (т. е. при отсутствии какого-либо пользовательского ввода с клавиатуры/мыши в течение х секунд). Величину простоя следует указывать в секундах (целочисленное значение). FindWindowExec descriptor - запуск скрипта при положительном результате поиска (т. е. при нахождении) Агентом программного окна с определённым текстовым заголовком (дескриптором). Параметр должен точь-в-точь совпадать с заголовком искомого окна, включая регистр и пробелы. NotFindWindowExec descriptor - запуск скрипта при отрицательном результате поиска Агентом программного окна с определённым текстовым заголовком (дескриптором). Параметр указывается аналогично случаю с инструкцией FindWindowExec. FindProcessExec ProcessName.exe - запуск скрипта при положительном результате поиска (т. е. при нахождении) Агентом образа процесса. Параметр должен содержать имя исполняемого файла процесса, включая расширение .exe. NotFindProcessExec ProcessName.exe - запуск скрипта при отрицательном результате поиска Агентом образа процесса. Параметр указывается аналогично случаю с инструкцией FindProcessExec. FindFileExec FileName - запуск скрипта при положительном результате поиска (т. е. при нахождении) Агентом файла с именем FileName. Параметр должен содержать полное (т. е. путь) или простое имя файла, включая расширение. NotFindFileExec FileName - запуск скрипта при отрицательном результате поиска Агентом файла с именем FileName. Параметр указывается аналогично случаю с инструкцией FindFileExec. FindFolderExec FolderName - запуск скрипта при положительном результате поиска (т. е. при нахождении) Агентом папки (директории) с именем FolderName. Параметр должен содержать полное (т. е. путь) или простое имя папки. NotFindFolderExec FolderName - запуск скрипта при отрицательном результате поиска Агентом папки (директории) с именем FolderName. Параметр указывается аналогично случаю с инструкцией FindFoldeExec. PingExec hostname - запуск скрипта при положительном результате проверки интернет-соединения с помощью отправки эхо-запроса (ping). Параметр может содержать IP- или DNS-адрес сетевого узла, которому следует отправить ICMP-пакет. Указание параметра не является обязательным (по умолчанию для проверки используется IP-адрес публичного DNS-сервера Google, т. е. 8.8.8.8). NotPingExec hostname - запуск скрипта при отрицательном результате проверки интернет-соединения с помощью отправки эхо-запроса (ping). Параметр указывается аналогично случаю с инструкцией PingExec.
Вспомогательные операторы
//Comments - двумя косыми чертами обозначаются комментарии; инструкции, начинающиеся таким образом, игнорируются Агентом при выполнении скрипта и служат для написания пользователем смысловых подсказок к программному алгоритму. DelayMultiple х - множитель задержки, позволяющий при необходимости замедлить выполнение скрипта. Значение по умолчанию - единица. При установке параметра в значение 2 скрипт замедлит свою работу в 2 раза, при установке в значение 3 - в 3 раза и т. д.. При установке параметра в значение 0 (не рекомендуется) скрипт начнёт выполняться с максимальной скоростью. Exit - завершение (корректное) выполнения скрипта и закрытие его потока.
Основные операторы
LeftButtonClick x - щелчок левой кнопкой мыши по текущей координате экрана. В качестве параметра следует указать число щелчков, выполняющихся один за другим. К примеру, для эмуляции двойного щелчка следует указать в качестве параметра двойку. Также следует учесть, что по умолчанию между кликами происходит задержка величиною 100 милисекунд и зависящая от множителя задержки (DelayMultiple). RightButtonClick x - щелчок правой кнопкой мыши по текущей координате. Параметр указывается аналогично случаю с инструкцией LeftButtonClick. LeftButtonDown x y - нажатие левой клавиши мыши в экранной координате х и у соответственно (х – значение координаты пикселя по горизонтали, у – по вертикали). LeftButtonUp x y - отпускание левой клавиши мыши в экранной координате х и у соответственно. RightButtonDown x y - нажатие правой клавиши мыши в экранной координате х и у соответственно. RightButtonUp x y - отпускание правой клавиши мыши в экранной координате х и у соответственно. SetCursorPos x y - установка курсора мыши в точку на экране с координатами х и у соответственно. RunNormal command parameters - запуск программы на выполнение в нормальном режиме. Первый параметр является обязательным и должен содержать параметр командной строки (команду), подлежащую запуску. Второй параметр не является обязательным и может содержать в себе параметры запуска команды. RunMinimized command parameters - запуск программы на выполнение в свёрнутом состоянии (минимизированном). Параметры указываются аналогично случаю с инструкцией RunNormal. RunMaximized command parameters - запуск программы на выполнение в развернутом состоянии (максимизированном). Параметры указываются аналогично случаю с инструкцией RunNormal. Sleep x - инструкция, позволяющая приостановить выполнение скрипта на х милисекунд (тысячных секунды). Значение параметра – целочисленное. При установке множителя задержки (DelayMultiple) в значение, отличное от единицы, величина параметра х при выполнении скрипта будет умножаться на этот множитель. PlaySound path.wav - оператор, позволяющий проиграть аудиофайл в формате WAV. Параметр должен содержать полный путь к проигрываемому файлу, включая расширение .wav. SendText text - отправить текстовый фрагмент активному элементу пользовательского интерфейса. ShutDown - выключить компьютер. Указание параметров не требуется. Reboot - перезагрузить компьютер. Указание параметров не требуется. KeyPress key - сэмулировать нажатие клавиши на клавиатуре. Параметр должен содержать имя нажимаемой клавиши. Список имён клавиш расположен в конце статьи. KeyDown key - сэмулировать залипание клавиши на клавиатуре. Параметр указывается аналогично случаю с инструкцией KeyPress. KeyUp key - сэмулировать отпускание клавиши на клавиатуре. Параметр указывается аналогично случаю с инструкцией KeyPress. BeginRepeat x - инструкция, обозначающая начало цикла со счётчиком. Параметр указывает количество повторов выполнения операторов, содержащихся между этой инструкцией и инструкцией "EndRepeat". Параметр INF (или INFINITE) задает бесконечный цикл проверок. Конструкция вложенных циклов (т. е. цикл в цикле) не допускается. EndRepeat - инструкция, обозначающая конец цикла со счётчиком. Указание параметров не требуется. RealTimeDelay хх:хх:хх - оператор, позволяющий остановить выполнение скрипта до тех пор, пока не наступит определённое время (реальное). Время необходимо указывать в формате часы:минуты:секунды. IdleTimeDelay x - оператор, позволяющий остановить выполнение скрипта до тех пор, пока не наступит таймаут простоя системы величиной х секунд. Величину простоя следует указывать в секундах (целочисленное значение). FindWindowDelay descriptor - оператор, позволяющий остановить выполнение скрипта до тех пор, пока Агент не получит положительный результат поиска программного окна (т. е. не найдёт его) с определённым текстовым заголовком (дескриптором). Параметр должен точь-в-точь совпадать с заголовком искомого окна, включая регистр и пробелы. NotFindWindowDelay descriptor - оператор, позволяющий остановить выполнение скрипта до тех пор, пока Агент не получит отрицательный результат поиска программного окна с определённым текстовым заголовком (дескриптором). Параметр указывается аналогично случаю с инструкцией FindWindowDelay. StopProcess ProcessName.exe - закрыть программный процесс, файл которого носит имя ProcessName.exe. TerminateProcess ProcessName.exe - завершить (принудительно) программный процесс, файл которого носит имя ProcessName.exe. В отличие от предыдущего оператора, оператор TerminateProcess рекомендуется использовать только для закрытия зависших или сильно "тормозящих" работу компьютера процессов, т. к. при его использовании возможны потери несохранённых данных. FindProcessDelay ProcessName.exe - оператор, позволяющий остановить выполнение скрипта до тех пор, пока Агент не получит положительный результат поиска процесса (т. е. не найдёт его) с именем образа ProcessName.exe. Параметр должен точь-в-точь совпадать с именем процесса, включая расширение .exe. NotFindProcessDelay ProcessName.exe - оператор, позволяющий остановить выполнение скрипта до тех пор, пока Агент не получит отрицательный результат поиска процесса с именем образа ProcessName.exe. Параметр указывается аналогично случаю с инструкцией FindProcessDelay. PingDelay hostname - оператор, позволяющий остановить выполнение скрипта до тех пор, пока Агент не получит положительный результат проверки доступности сетевого узла (интернет-соединения) с помощью отправки эхо-запроса (ping). Параметр может содержать IP- или DNS-адрес сетевого узла, которому следует отправить ICMP-пакет. Указание параметра не является обязательным (по умолчанию для проверки используется IP-адрес публичного DNS-сервера Google, т. е. 8.8.8.8). NotPingDelay hostname - оператор, позволяющий остановить выполнение скрипта до тех пор, пока Агент не получит отрицательный результат проверки доступности сетевого узла (интернет-соединения) с помощью отправки эхо-запроса (ping). Параметр указывается аналогично случаю с инструкцией PingDelay. FindFileDelay FileName - оператор, позволяющий остановить выполнение скрипта до тех пор, пока Агент не получит положительный результат проверки существования файла (т. е. не найдёт его) с именем FileName. В качестве параметра следует указывать полное (т. е. путь) или простое имя файла, включая расширение. NotFindFileDelay FileName - оператор, позволяющий остановить выполнение скрипта до тех пор, пока Агент не получит отрицательный результат проверки существования файла с именем FileName. Параметр указывается аналогично случаю с инструкцией FindFileDelay. DeleteFile FileName - удалить файл с именем FileName. Параметр указывается аналогично случаю с инструкцией FindFileDelay. RenameFile FileName - переименовать файл с именем FileName. Параметр указывается аналогично случаю с инструкцией FindFileDelay. CopyFile SourceFileName, DestinationFileName - скопировать файл с именем SourceFileName в директорию с именем DestinationFileName. В качестве параметра следует указывать полное (т. е. путь) или простое имя оригинального файла, а также полное или простое имя его будущей копии, разделяя их запятой и пробелом. Следует также учесть, что в процессе копирования файл может быть переименован. Например, для копирования файла C:\MyFile.txt в корневую директорию диска D, оператор следует записать следующим образом: CopyFile C:\MyFile.txt, D:\MyFile.txt. MoveFile SourceFileName, DestinationFileName - переместить файл с именем SourceFileName в директорию с именем DestinationFileName. Параметр указывается аналогично случаю с инструкцией CopyFile. FindFolderDelay FolderName - оператор, позволяющий остановить выполнение скрипта до тех пор, пока Агент не получит положительный результат проверки существования папки (т. е. не найдёт её) с именем FolderName. В качестве параметра следует указывать полное (т. е. путь) или простое имя папки. NotFindFolderDelay FolderName - оператор, позволяющий остановить выполнение скрипта до тех пор, пока Агент не получит отрицательный результат проверки существования папки с именем FolderName. Параметр указывается аналогично случаю с инструкцией FindFolderDelay. CreateFolder FolderName - создать папку с именем FolderName. Параметр указывается аналогично случаю с инструкцией FindFolderDelay. DeleteFolder FolderName - удалить папку с именем FolderName. Параметр указывается аналогично случаю с инструкцией FindFolderDelay. RenameFolder FolderName - переименовать папку с именем FolderName. Параметр указывается аналогично случаю с инструкцией FindFolderDelay. CopyFolder SourceFolderName, DestinationFolderName - скопировать папку с именем SourceFolderName в директорию с именем DestinationFolderName. В качестве параметра следует указывать полное (т. е. путь) или простое имя оригинальной папки, а также полное или простое имя её будущей копии, разделяя их запятой и пробелом. Следует также учесть, что в процессе копирования папка может быть переименована. Например, для копирования папки C:\MyFolder в корневую директорию диска D, оператор следует записать следующим образом: CopyFolder C:\MyFolder, D:\MyFolder. MoveFolder SourceFolderName, DestinationFolderName - переместить папку с именем SourceFolderName в директорию с именем DestinationFolderName. Параметр указывается аналогично случаю с инструкцией CopyFolder. SendEMail Доступно только для пользователей Message - команда, предназначенная для отправки электронного письма посредством скрипта на заданный адрес электронной почты с помощью почтового ящика Полигон 51. Первый параметр содержит адрес получателя письма, второй - само сообщение (тело письма).
Краткий список операторов
AutoExec RealTimeExec хх:хх:хх IdleTimeExec х FindWindowExec descriptor NotFindWindowExec descriptor FindProcessExec ProcessName.exe NotFindProcessExec ProcessName.exe FindFileExec FileName NotFindFileExec FileName FindFolderExec FolderName NotFindFolderExec FolderName PingExec hostname NotPingExec hostname //Comments DelayMultiple x Exit LeftButtonClick x RightButtonClick x LeftButtonDown x y LeftButtonUp x y RightButtonDown x y RightButtonUp x y SetCursorPos x y RunNormal command parameters RunMinimized command parameters RunMinimized command parameters Sleep x PlaySound path.wav SendText text ShutDown Reboot KeyPress key KeyDown key KeyUp key BeginRepeat x EndRepeat RealTimeDelay x IdleTimeDelay x FindWindowDelay x NotFindWindowDelay x StopProcess ProcessName.exe TerminateProcess ProcessName.exe FindProcessDelay ProcessName.exe NotFindProcessDelay ProcessName.exe PingDelay hostname NotPingDelay hostname FindFileDelay FileName NotFindFileDelay FileName DeleteFile FileName RenameFile FileName CopyFile FileName MoveFile FileName FindFolderDelay FolderName NotFindFolderDelay FolderName DeleteFolder FolderName RenameFolder FolderName CopyFolder FolderName MoveFolder FolderName CreateFolder FolderName SendEMail adress@domain.ru message
Задача: После того, как пользователь перестанет нажимать клавиши на клавиатуре и двигать курсор мыши (например, покинув рабочее место в конце рабочего дня и забыв выключить компьютер) в течение 5 минут непрерывно, проиграть мелодию. Если во время проигрывания мелодии пользователь не проявит активность, нажав CTRL+S - выключить компьютер.
* Примечание: в качестве примера подразумевается, что проигрываемый файл находится в одной папке с программой POLYGON51AGENT и носит имя Melody.wav.
Псевдокод: Делаем запуск скрипта автоматическим при загрузке программы POLYGON51AGENT (автозагрузка Агента при старте Windows включена заранее); Приостанавливаем выполнение скрипта до появления интервала простоя величиной более 300 секунд; ПК простаивал более 300 секунд, проигрываем файл Melody.wav; После окончания проигрывания - выключаем ПК.
Задача: На ПК работает программа, которая периодически из-за ошибок или некорректных действий пользователя "вылетает" или "закрывается". Требуется отслеживать её состояние и, в случае необходимости, перезапускать. *
* Примечание: в качестве примера для проверки состояния использовалась стандартная программа "Калькулятор" от компании Microsoft, входящая в состав Windows.
Псевдокод: Делаем запуск скрипта автоматическим при загрузке программы POLYGON51AGENT (автозагрузка Агента при старте Windows включена заранее); Запускаем бесконечный цикл; Внутри цикла приостанавливаем выполнение скрипта до тех пор, пока не исчезнет процесс Calc.exe; Процесс не найден (программа закрылась или "вылетела"), перезапускаем Калькулятор; Приостанавливаем выполнение скрипта на одну секунду для стабильности работы ПК и экономии ресурсов; Закрываем цикл с помощью служебного слова EndRepeat.
Задача: ПК используется исключительно как терминал для доступа к серверу по протоколу RDP. Сделать так, чтобы при старте Windows автоматически запускался заранее сохранённый RDP-файл, а при закрытии RDP-клиента компьютер автоматически выключался.
* Примечание: в качестве примера подразумевается, что требуемый RDP-файл с настройками лежит в корневой папке диска С и носит имя Term.rdp.
Псевдокод: Делаем запуск скрипта автоматическим при загрузке программы POLYGON51AGENT (в идеале настроить приложение POLYGON51AGENT заранее в качестве оболочки Windows); Запускаем файл удалённого подключения Term.rdp; Ждём одну секунду пока запускается RDP-клиент; Приостанавливаем выполнение скрипта до того момента, пока процесс RDP-клиента не исчезнет (т. е. пока пользователь не закончит работу с ним); После закрытия процесса - выключаем компьютер.
Задача: На компьютере через удалённое подключение работает 1С. На сервере установлен слишком малый таймаут простоя - 1С часто отключается при отсутствии какой-либо активности пользователя. Требуется как-то эмулировать его активность при вынужденном уходе с рабочего места. Как только пользователь нажмёт любую клавишу или шевельнёт мышью - прекратить эмуляцию.
* Примечание: эмуляция активности будет производиться при помощи заранее запрограммированных движений курсора мыши.
Псевдокод: Делаем запуск скрипта автоматическим при загрузке программы POLYGON51AGENT (автозагрузка Агента при старте Windows включена заранее); Запускаем бесконечный цикл; Внутри цикла приостанавливаем выполнение скрипта до появления интервала простоя величиной более 10 секунд; Как только интервал простоя превысит 10 секунд, начинаем эмулировать движения мышью по заранее заготовленной схеме; Закрываем цикл с помощью служебного слова EndRepeat.
Задача: На рабочем компьютере пропал интернет из-за неполадок у провайдера. Требуется отслеживать интернет-соединение и, когда соединение восстановится, уведомить звуковым сигналом и отправить письмо на почту системному администратору.
* Примечание: в данном примере требуется заранее настроить подключение к почтовому ящику от Полигон 51, введя логин и пароль - письмо будет отправлено с его адреса. Также подразумевается, что проигрываемый файл находится в одной папке с программой POLYGON51AGENT и носит имя Melody.wav.
Псевдокод: Приостанавливаем выполнение скрипта до тех пор, пока узел www.ya.ru не станет доступным; Узел www.ya.ru доступен (получен ответ),проигрываем файл Melody.wav; Отправляем на адрес Доступно только для пользователей электронное письмо с уведомлением о восстановлении соединения.
The world, the theater, the dream... The battlefield...