Тема: w32 - Вызов WinAPI функций из Lua
Если из скрипта робота понадобилось вызвать какие-либо функции WinAPI - проще всего взять готовую библиотеку-обертку.
Например, библиотеку w32 для Lua.
Библиотека есть в пакете LuaForWindows, но вариант на этом сайте содержит больше функций, кроме того содержит варианты для для QUIK 6-7 (Win32), QUIK 8 (Win64), QUIK 8.5 (Win64, Lua5.3), QUIK 8.11 (Win64, Lua5.4).
Загрузка (ссылки):
[url=https://quik2dde.ru/static-img/78/w32.dll.zip]архив с готовой библиотекой w32.dll[/url]
[url=https://github.com/swerg/qlua-w32]Исходники на GitHub[/url]
Для справки: [url=https://github.com/luaforge/w32wrappers]сайт проекта w32[/url]; на основании этих исходников была сделана библиотека, представленная на этом сайте
Установка:
Скачать архив с библиотекой по ссылке выше.
Скопировать файл w32.dll в каталог с QUIK (т.е. там, где info.exe).
В зависимости от используемой версии QUIK файл w32.dll взять из соответствующей папки архива:
\x32 - для QUIK версий 6.x и 7.x
\x64-Lua51 - для QUIK версий 8.0..8.4
\x64-Lua53 - для QUIK версий 8.5 и более новых
\x64-Lua54 - для QUIK версий 8.11 и более новых
Важно:
Для сборок Lua53 и Lua54 добавлена проверка версии Lua, указанной для запуска скрипта. Т.е. если вы взяли сборку библиотеки для Lua5.3, а запустили скрипт на Lua5.4, то увидите ошибку:
"multiple Lua VMs detected. Expected 5.3 instead of 5.4"
И наоборот, если взяли сборку библиотеки для Lua5.4, а запустили скрипт на Lua5.43, то увидите ошибку:
"multiple Lua VMs detected. Expected 5.4 instead of 5.3"
Как одновременно держать готовыми библиотеки и для Lua5.3 и для Lua5.4 - это надо придумывать. Можно разложить их в разные каталоги и настраивать в скрипте нужные пути поиска в зависимости о версии Lua, которую можно определить в скрипте из глобальной переменной _VERSION.
Использование:
В начало скрипта вставляем
w32 = require("w32")
По поводу сборки библиотеки на этом сайте.
Сначала изменения были минимальны: в исходном коде я ничего не менял, лишь указал на использование qlua.dll вместо lua5.1.dll, так удобнее в использовании. Также пересобрал библиотеку так, чтобы никакие доп. библиотеки не требовались для работы.
Позже библиотека была перекомпилирована для x64 платформы, т.к. QUIK с версии 8.х стал 64-битным.
С выходом QUIK 8.5 (где встроена Lua5.3) библиотеку модифицировал так, чтобы можно было собирать как вариант для Lua5.1, так и для Lua5.3.
Со временем в библиотеку были добавлены дополнительные функции, отсутствующие в ней изначально, которые оказались необходимы для задач автоматизации QUIK.
Справка (документация):
Порядок, типы и количество аргументов функций, включенных в эту библиотеку, совпадают с соответствующими оригинальными функциями WinAPI. Поэтому подробная справка здесь для большинства функций не приводится. Справку по аргументам функций можно получить в документации от Microsoft.
Список поддерживаемых функций:
Важно: если вы хотите использовать функции, отмеченные здесь как "добавлена" - то необходимо скачать сборку именно с этого сайта, т.к. такие функции есть только в сборке с этого сайта!