Библиотека для поддержки автоматизации на основе MS-DOS скриптов

wait.mds

Copyright (C) Антон Копьёв,
GNU General Public License.


НАЗНАЧЕНИЕ БИБЛИОТЕКИ


Библиотека wait.mds — это средство поддержки автоматизации на основе скриптов MS-DOS. Весь спектр функциональности библиотеки содержится в файле «wait.mds.bat», который может быть использован как исполняемый файл для вызова из любой локальной папки, а также как инсталлятор для установки и регистрации библиотеки. Исходный файл библиотеки и сопутствующие к ней файлы доступны по ссылке проекта: https://github.com/kopyurff/wait.mds.


Функционал библиотеки разделен на внешние вызовы внутренних процедур и обработку событий. Библиотека также содержит макроопределения (макросы), которые могут быть загружены в контекст пакетного файла пользователя для выполнения. Поскольку функционал библиотеки в основном направлен на решение задач автоматизации определенных действий на локальном компьютере, она предназначена для использования на серверах под управлением ОС Windows или для решения серверных задач на локальном компьютере. Для корректной работы рекомендуется использовать библиотеку под пользователем с правами администратора.


УСТАНОВЩИК БИБЛИОТЕКИ


Файл библиотеки "wait.mds.bat" для своего использования в общем случае не требует предварительной установки программного обеспечения на ОС Windows всех версий от XP до 11 и может использоваться как есть на любой машине. При вызове пользователем элементов функциональности библиотеки требуемая установка производится автоматически в фоновом режиме. Исключением является обязательная предварительная установка Microsoft .NET Framework 3.5 SP1 на Windows XP, поскольку эта ОС не имеет предустановленного фреймворка. Также для работы консольных приложений должна быть настроена система безопасности ОС. Если эти настройки не были выполнены, то их следует либо выполнить вручную, либо запустить установщик для автоматической настройки:


call wait.mds.bat /sub:install /install /all


Если ОС нуждалась в ручной или автоматической настройке параметров, то для их вступления в силу необходимо перезагрузить компьютер. Если вы производите установку, то для ее завершения вам потребуется запустить ее снова после перезагрузки. В результате полной установки в папке %ProgramFiles% будет создан подкаталог "wait.mds", в котором будут находиться: копия оригинального файла библиотеки; облегченная версия библиотеки в файле "wait.mds.lite.bat"; файл справки HTML; текстовый файл в кодировке консоли со счетчиками производительности для утилиты "typeperf.exe"; скомпилированные и зарегистрированные файлы COM-сервера (x86/x64 в зависимости от разрядности ОС); исходный код COM-сервера на VB.NET и вспомогательный файл на VBScript из установщика. Также регистрируется переменная окружения %wait.mds% для запуска библиотеки "wait.mds.lite.bat" из любой папки и создается ярлык на рабочем столе для файла справки HTML, который также можно открыть с помощью клавиш "Ctrl-Alt-Shift-W".


Помимо ключа "/all", также возможна установка только COM-сервера с помощью ключа "/vb", установка только счетчиков производительности с помощью ключа "/tpc", а также установка с помощью ключа "/lib", который выполняет все действия из полной установки, за исключением действий при установках с двумя предыдущими ключами.


ВЫЗОВЫ ВНУТРЕННИХ ПРОЦЕДУР


Внешний вызов внутренних библиотечных процедур реализуется через форматированную строку первого аргумента, содержащую префиксную подстроку "/sub:" и суффиксную подстроку, содержащую имя процедуры. Следующие аргументы являются аргументами внутренних процедур. Основными процедурами являются процедура установщика, а также процедуры "importMacros" и "unsetMacros" для загрузки и выгрузки определений макросов из контекста пакетного файла пользователя. Установленная версия библиотеки "wait.mds.lite.bat" не имеет процедуры установщика. Полное описание внешних процедур приведено в HTML-файле справки установленной библиотеки.


ОБРАБОТКА СОБЫТИЙ


Обработка событий — это вызов библиотеки с параметрами, которые указывают, что выполнение пакетного файла должно быть остановлено до тех пор, пока не будет обнаружено определенное изменение в системе, после чего она должна продолжить работу. Полное описание приведено в файле справки HTML, краткий список типов событий, которые можно отслеживать: появление или исчезновение файла или папки; изменение атрибутов файла или папки; запуск или завершение процесса; появление или закрытие окна с заголовком; изменение сетевого трафика; изменение интенсивности чтения/записи; изменение свободного места на диске; изменение загрузки ЦП; изменение активности процесса; изменение состояния окна (развернуто/свернуто и т. д.); ожидание появления указанного текста в консоли; ожидание указанного значения переменной окружения в другой консоли. Также поддерживаются список событий из внешнего файла в формате JSON и пользовательские события, которые определяются макросом, разработанным пользователем. В библиотеку также встроен механизм таймаутов для прекращения ожидания событий после указанного интервала времени.


ИМПОРТИРУЕМЫЕ МАКРОСЫ БИБЛИОТЕКИ


Определения макросов импортируются в контекст пакетного файла пользователя с помощью вызова процедуры библиотеки. Их полное описание приведено в файле справки HTML, который генерируется установщиком. Список определений макросов библиотеки:

  1. @errorLevel - устанавливает уровень ошибки, равный цифровому значению;
  2. @isok - проверка корректности импорта определений;
  3. @exit - выход из стека вызовов файлов и процедур;
  4. @error - сообщает об ошибке и завершает выполнение скрипта;
  5. @echo_imprint - печатает текст в одной той же строке консоли;
  6. @imprintxy - печатает текст со сдвигом строки и столбца;
  7. @drop_conrows - очищает указанное количество последних строк консоли;
  8. @mac_wrapper - запуск макроса и возврат его результата;
  9. @mac_wraperc - запуск макроса и возврат его результата;
  10. @mac_check & @istrue - запуск макроса и установка уровня ошибки;
  11. @spinner - запускает цикл до указанного таймаута в мсек;
  12. @mac_spinner - запускает цикл, пока макрос не завершит работу;
  13. @mac_loop & @mac_do - цикл под управлением макроса с телом цикла;
  14. @unset - удаляет определения переменных, очищая их значения;
  15. @unset_mac - удаляет определения макросов;
  16. @unset_alev - удаляет переменные окружения;
  17. @runapp - запускает новое приложение с помощью команды `start`;
  18. @chcp_file - перекодирует текст файла из одной кодовой страницы в другую;
  19. @str_length - вычисляет длину строки;
  20. @str_unquote - удаляет все кавычки в строке;
  21. @fixedpath - ищет и получает полный путь объекта на диске;
  22. @shortpath - преобразует строку пути объекта в строку имен DOS "8.3";
  23. @get_number - устанавливает числовое значение переменной;
  24. @get_xnumber - числовое значение переменной (x16 -> x10);
  25. @rand - генерирует случайное число в заданном диапазоне;
  26. @echo_params - выводит список параметров;
  27. @enumA & @enumB - печать результата 'for-in-do' одного за другим;
  28. @ipaddress - локальный IP-адрес;
  29. @web_avail - проверяет, доступно ли подключение к Интернету;
  30. @web_ip - возвращает локальный IP-адрес подключения к Интернету;
  31. @regvalue - значение из реестра Windows в кодовой странице консоли;
  32. @shellfolder - полные пути к специальным папкам;
  33. @oemtocp - перекодировка из OEM Windows в кодовую страницу консоли;
  34. @cptooem - перекодировка из кодовой страницы консоли в OEM Windows;
  35. @str_decode - заменяет псевдотеги с кодами на символы строки;
  36. @syms_replace - заменяет все вхождения символов на другие символы;
  37. @sym_replace - заменяет все вхождения символа на другой символ;
  38. @syms_cutstr - получает подстроки между символом(ами);
  39. @pid_title - возвращает заголовок окна процесса с заданным PID;
  40. @title - получает заголовок окна или идентификатор процесса (PID);
  41. @title_pid - находит PID окна, используя подстроку заголовка;
  42. @substr_remove - удаляет подстроки внутри разделителей;
  43. @substr_get - вывод строки из подстрок внутри разделителей;
  44. @substr_extract - вывод подстрок внутри заданных разделителей;
  45. @substr_regex - подстрока символов, соответствующих регулярному выражению;
  46. @str_trim - очищает начальные и конечные символы;
  47. @str_encode - замена управляющих символов на их ASCII коды;
  48. @str_clean - удаляет выбранные наборы символов из строки;
  49. @str_plate - перезаписывает выбранные наборы символов;
  50. @str_arrange - реорганизация подстрок в строке;
  51. @str_upper - преобразует строку в верхний регистр букв;
  52. @str_isempty - проверяет, является ли параметр пустым;
  53. @date_span - временной промежуток дат и времени формата WMIC;
  54. @time_span - извлекает значения времени из строки времени;
  55. @obj_attrib - считывает атрибуты файла или папки на диске, их изменение;
  56. @obj_size - получает данные о размере файла или папки на диске;
  57. @disk_space - общее, свободное и используемое пространство диска;
  58. @exist - проверяет наличие объекта на диске;
  59. @exist_check - проверка наличия объекта и работоспособности диска;
  60. @obj_newname - новое имя в указанном месте для нового объекта;
  61. @perf_counter - получает локализованный счетчик typeperf.exe;
  62. @typeperf - возвращает результат запроса typeperf.exe.
  63. @typeperf_devs - возвращает список устройств с запроса typeperf.exe;
  64. @typeperf_res_a - определяет использование устройства по двум счетчикам;
  65. @typeperf_res_b - определяет использование устройства;
  66. @typeperf_res_c - определяет использование устройства по двум счетчикам;
  67. @typeperf_res_d - определяет использование устройства;
  68. @typeperf_res_use - использование устройств по их прошитым типам;
  69. @nicconfig - находит сетевое устройство и возвращает его данные;
  70. @netdevs - возвращает CSV-списки основных свойств сетевых устройств;
  71. @res_select - выполняет задачу и выбирает элементы ее результата;
  72. @event_file - добавляет или удаляет запись из файла событий;
  73. @event_item - получает указанный атрибут события с идентификатором;
  74. @runapp_getpid - запускает приложение и возвращает его PID;
  75. @sleep_wsh - остановка вызывающего процесса на несколько миллисекунд;
  76. @runapp_wsh - запуск приложения с помощью объекта `WScript.Shell`;
  77. @sendkeys - отправка нажатий клавиш клавиатуры в активное окно;
  78. @shortcut - создает ярлык Windows указанного объекта;
  79. @hex - преобразует десятичное число в шестнадцатеричную строку;
  80. @taskinfo - возвращает сведения о процессе;
  81. @procpriority - считывает или устанавливает приоритет процесса;
  82. @findwindow - находит окно, используя имя класса окна и его заголовок;
  83. @windowstate - проверяет состояние заданного атрибута окна;
  84. @activewindow - возвращает дескриптор текущего активного окна;
  85. @foregroundwindow - возвращает дескриптор окна переднего плана;
  86. @windowclass - возвращает класс окна с указанным дескриптором;
  87. @windowcaptext - возвращает заголовок окна с указанным дескриптором;
  88. @windowrect - возвращает прямоугольник клиентской области окна;
  89. @showwindow - показывает окно в соответствии с заданной командой;
  90. @findshow - находит окно по именам класса и заголовка, показывает его;
  91. @movewindow - перемещает окно в точку в абсолютных координатах;
  92. @sendmessage - отправляет сообщение окну с указанным дескриптором;
  93. @findcontrol - находит дочернее окно родительского окна;
  94. @closewindow - закрывает или сворачивает окно;
  95. @showdesktop - макрос сворачивает все окна и показывает рабочий стол;
  96. @repaint - перерисовывает указанное окно или рабочий стол;
  97. @windowsofpid - возвращает дескрипторы окон процесса с указанным PID;
  98. @pidofwindow - возвращает PID процесса окна с указанным дескриптором;
  99. @coprocess - возвращает PID дочернего или родительского процесса;
  100. @screenshot - делает снимок экрана окна или экрана и сохраняет его в файл;
  101. @compareshots - побайтовое сравнение данных двух снимков экрана;
  102. @cursorpos - получение или изменение абсолютных координат указателя мыши;
  103. @mouseclick - эмулирует нажатие кнопки мыши;
  104. @monitor - возвращает идентификатор монитора;
  105. @appbarect - возвращает прямоугольник панели задач Windows;
  106. @screenrect - возвращает прямоугольник клиентской области монитора;
  107. @screensize - получение или изменение разрешения экрана монитора;
  108. @movetoscreen - перемещает окно в клиентскую область монитора;
  109. @consoletext - считывает текст указанного консольного окна;
  110. @shrink - сжатие данных, поддерживает строковое представление сжатых данных;
  111. @comparefiles - выполняет побайтовое сравнение данных двух файлов;
  112. @environset - выводит все переменные среды процесса консоли;
  113. @enwalue - получает переменную среды из процесса `cmd.exe`;
  114. @radix - преобразует числа из одной системы счисления в другую;
  115. @code - кодирует строку в последовательность 16-ых кодов символов;
  116. @callstack - возвращает текущий стек вызовов в указанном `cmd.exe`.

НАБОР ДОПОЛНИТЕЛЬНЫХ ФАЙЛОВ ПРОЕКТА БИБЛИОТЕКИ


Проект библиотеки находится по ссылке, указанной в начале этого описания. В проект библиотеки wait.mds были добавлены дополнительные файлы для лучшего соответствия критериям программного обеспечения с открытым исходным кодом, для документирования устанавливаемых компонентов и, при необходимости, для упрощения работы с исходным кодом. Например, развернутое определение макроса можно временно переместить в локальный файл пользователя для трассировки или использовать для изучения исходного кода библиотеки. Список файлов с их относительным расположением:

  1. ".\docs\Назначение и сигнатуры COM-функций библиотеки wait.mds.pdf" - описание COM сервера на русском языке;
  2. ".\docs\Purpose and signatures of COM functions of the wait.mds library.pdf" - описание COM сервера на английском языке;
  3. ".\macros\macros.general.collapsed.bat" - полный список свёрнутых определений макросов общего назначения;
  4. ".\macros\macros.general.expanded.bat" - полный список развернутых определений макросов общего назначения;
  5. ".\macros\macros.special.expanded.bat" - полный список определений макросов, которые используются внутри библиотеки, а также определений макросов, которые представлены в виде переработанных строк внутри макросов общего назначения;
  6. ".\tests\wait.mds.tests.macros.bat" - полный набор тестов для макросов общего назначения. В дополнение к полному перечню тестов макросов, он также является списком примеров их использования;
  7. ".\tests\call.stack.test\.." - подпапка, используемая тестами макросов общего назначения;
  8. ".\tests\call.stack.test\dir 4\test-stack-4.bat" - содержит тест и пример использования макроса @callstack;
  9. ".\tests\wait.mds.tests.events.bat" - полный список тестов обработки событий;
  10. ".\tests\wait.events.json" - файл в формате JSON, используемый для тестирования обработки событий и макросов;
  11. ".\tests\wait.mds.tests.subroutine.bat" - тестирование внешней процедуры;
  12. ".\tests\wait.mds.samples.installer.bat" - тестирование установщика;
  13. ".\tests\wait.mds.samples.events-mymacro.bat" - пример преобразования простого макроса в строку, которую можно включить в файл событий JSON;
  14. ".\com.api.wrapper\test_batch.bat" - тестовый скрипт, который используется тестами;
  15. ".\com.api.wrapper\test_forms.exe" - тестовое приложение, используемое тестами. Оно откомпилировано с использованием Microsoft .NET Framework 3.5 SP1 и в более поздних версиях ОС фреймворк необходимо будет установить локально, если он не установлен;
  16. ".\com.api.wrapper\- wds.source -\wait.mds.injector.cpp" - исходный файл динамической библиотеки инжектора на языке Си, которая используется для чтения текста консоли. В исходном коде COM сервера скомпилированные 32-х и 64-битные версии инжектора представлены в виде свернутых строк;
  17. ".\docs\Общее описание библиотеки wait.mds.pdf" - общее описание библиотеки на русском языке;
  18. ".\docs\General description of the wait.mds library.pdf" - общее описание библиотеки на английском языке.

СТАТУС ПРОЕКТА, ПОДДЕРЖКА И РАЗВИТИЕ


Исходный код библиотеки работоспособен и может быть использован на версиях ОС Windows от XP до 11. Текущий набор функционала библиотеки формировался в течение нескольких лет для решения тех задач автоматизации, которые возникали лично у меня. Данный функциональный набор публикуется для общего использования как есть. С целью решения других аналогичных задач автоматизации набор возможностей библиотеки может быть расширен или улучшен. Для предложений по поддержке и развитию проекта я доступен по следующим контактам:


E-Mail: kopyurff@yahoo.com, kopyurff@rambler.ru

Мобильный: 8-921-912-44-10

This site was made on Tilda — a website builder that helps to create a website without any code
Create a website