Orion9

|
Posted: Sun May 31, 2026 11:57 Post subject: |
|
|
| AkulaBig wrote: | | Для Ауторан сами алгоритмы будут точно такими-же. |
Разумеется. Autorun это практически тот же Autohotkey или AutoIt, конечно алгоритмы будут такими же. При этом Autohotkey намного ближе по синтаксису, поэтому с него проще переводить код, полученный от ИИ.
Недели 2-3 назад я спрашивал у болвана за DllCall в Autorun, тогда он мне ответил, что Autorun его не поддерживает, но сейчас спросил и...
 плагин Autorun для Total Commander поддерживает DllCall? Да, плагин Autorun для Total Commander поддерживает функцию DllCall. [1]
Возможность прямого вызова функций из динамических библиотек (DLL) была официально добавлена автором плагина в одном из крупных обновлений. Это нововведение позволило пользователям отказаться от создания сторонних утилит или сложных костылей ради одного-двумя вызовов WinAPI. [1]
## Особенности работы с DllCall в Autorun
* Прямой вызов WinAPI: С помощью этой функции можно напрямую обращаться к системным библиотекам Windows (например, user32.dll, kernel32.dll).
* Пример использования: Теперь в скриптах конфигурации autorun.cfg можно проверять состояние клавиш (например, нажата ли клавиша CapsLock или Shift) напрямую через системные функции, не прибегая к блокировкам или сторонним хукам. [2]
* Область видимости: Внедрение DllCall совпало с улучшением логики работы переменных окружения. Локальные и глобальные переменные плагина корректно изолируются, что упрощает передачу параметров в DLL и обработку возвращаемых значений. [1]
Если вы хотите детально настроить вызовы под конкретную задачу, дайте знать:
* Какую конкретную функцию WinAPI или сторонней DLL вы планируете вызвать?
* Какое действие (сворачивание, проверка системных параметров, управление окнами) должен выполнять скрипт?
Я смогу подсказать корректный синтаксис для вашего файла конфигурации autorun.cfg.
Т.ч. двери открыты, дамы и господа! Но не всё так просто. На предложение перевести вот этот код с Autohotkey, он выкинул какой-то мусор:
| Code: | WriteLine(text) {
rawString := text "`r`n"
bufLen := StrPut(rawString, "UTF-8")
buf := Buffer(bufLen, 0)
StrPut(rawString, buf, "UTF-8")
; Отправляем байты напрямую в канал процесса через WinAPI WriteFile
DllCall("WriteFile", "Ptr", this.hPipe, "Ptr", buf, "UInt", bufLen - 1, "UInt*", &bytesWritten := 0, "Ptr", 0)
} |
 Hidden text | Code: | В скриптах плагина Autorun для Total Commander перевод этого AHK-кода будет выглядеть значительно проще. Плагин автоматически умеет выделять буферы и конвертировать строки в UTF-8, что избавляет вас от необходимости вручную вызывать аналоги StrPut и создавать структуры Buffer(). [1]
Ниже представлен готовый перевод логики вашей функции в формат файла конфигурации autorun.cfg:
## Готовый код для autorun.cfg
# Предполагается, что переменная hPipe уже содержит хэндл вашего канала (Pipe)
# 1. Формируем строку с переносом каретки и переводом строки
SetEnv text_raw "%text%%CRLF%"
# 2. Вызываем WriteFile напрямую
# Autorun сам сконвертирует текстовую переменную в UTF-8 при использовании типа "utf8"
DllCall("WriteFile", "handle", %hPipe%, "utf8", %text_raw%, "dword", -1, "dword*", bytesWritten, "ptr", 0)
## Разбор ключевых изменений и упрощений:
1. Автоматический подсчет длины: В типе параметра "utf8" плагина Autorun можно передать -1 в качестве размера данных (dword), если строка оканчивается нулевым байтом. Функция сама определит длину строки.
2. Тип данных "utf8": Вместо ручного выделения памяти через Buffer и кодирования с помощью StrPut, в Autorun встроен тип параметра "utf8" (или "string" для ANSI/Unicode в зависимости от версии, но "utf8" строго указывает на нужную вам кодировку). Он берет строку, налету создает под неё байтовый буфер, отправляет в функцию WinAPI и сам же очищает память.
3. Регистронезависимые типы: В Autorun используются стандартные типы данных для DllCall, аналогичные системным: "handle" вместо "Ptr" для дескрипторов, "dword" вместо "UInt", и "dword*" для получения количества записанных байт в переменную bytesWritten. [1]
4. Константа %CRLF%: Для добавления переноса строки (r`n из AHK) в Autorun используется встроенная системная переменная окружения %CRLF%.
Если вам необходимо собирать этот код внутри локальной секции (функции) или требуется инициализировать хэндл самого пайпа (hPipe) через CreateFile / CallNamedPipe — напишите, я помогу составить полную цепочку вызовов! |
Т.ч. увы — пока только на собственный драйвер руки.sys придётся расчитывать. |
|