Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
Порылся немножко по справке и понял что много команд можно использовать в проектах NeoBook, WisualNeoWin. Кто заинтересуется: Скачать Autolt можно здесь. Справку на русском языке (правда устаревшую) скачать можно здесь.
Мне давно нужен был плагин или функция которые могли бы определять кодировку файла, но... В Autolt я такую возможность нашел и воплотил в жизнь.
Ниже напишу краткую инструкцию ка это все применить не изучая глубоко Autolt.
Все что нам нужно, создать консольное приложение и запускать его с помощью плагина dmCMDLine. Спасибо Дембелю.
Можно и сам скрипт запускать, но это уже кто как хочет... Не буду расписывть, все равно азы придется постигать, по этому разберетесь.
Пишем скрипт Autolt. Можно использовать как шаблон.
Код
#NoTrayIcon ;приложение без окна и иконок в трее. Консольное..
;В переменной $CmdLine[0] находится кол-во передаваемых параметров
;В первом параметре всегда передаем название функции ;Если 1 параметр передается, присваиваем переменной $param1 значение которое находится в переменной $CmdLine[1] If $CmdLine[0] = 1 Then Global $param1 = $CmdLine[1] EndIf ;Если 2 присваиваем двум переменным соответствующие значения If $CmdLine[0] = 2 Then Global $param1 = $CmdLine[1] Global $param2 = $CmdLine[2] EndIf
;\\\\\\ЗДЕСЬ ПИШЕМ УСЛОВИЯ С НАЗВАНИЕМ ФУНКЦИИ\\\\\\\\\\\\\\\\\\\
;Получить кодировку файла 1параметр = название функции, 2 параметр = путь к файлу: If $param1 = "FileGetEncoding" Then _FileGetEncoding($param2) EndIf
; Получить дескриптор указанного окна. If $param1 = "WinGetHandle" Then _WinGetHandle($param2) EndIf
;\\\\\\ЗДЕСЬ ПИШЕМ САМИ ФУНКЦИИ К КОТОРЫМ ПЕРЕХОДИМ ПОСЛЕ ВЫПОЛНЕНИЯ УСЛОВИЯ ВЫШЕ\\\\\\\\\
;Получить кодировку файла: Func _FileGetEncoding($param2) Local $iResult = FileGetEncoding ($param2) ; Возвращает кодировку файла запущенного скрипта If @error Then ConsoleWrite (@error) ;Вернет -1 если ошибка Else ConsoleWrite ($iResult) ;Вернет 0 = ANSI, 32 = UTF16 Little Endian, 64 = UTF16 Big Endian, 128 = UTF8 (с BOM), 256 = UTF8 (без BOM), 512 = Кириллица ? EndIf EndFunc
; Получить дескриптор указанного окна. Func _WinGetHandle($param2) Local $iResult = WinGetHandle ($param2) ; Получить дескриптор указанного окна. If @error Then ConsoleWrite (@error) ;Вернет 1 если нет окон Else ConsoleWrite ($iResult) ;Вернет дескриптор EndIf EndFunc
Сохраняем файл с расширением au3. Например сохраним под названием FileGetEncoding.au3.
Далее нужно будет установить программу Autolt хотя бы один раз. Какие файлы отвечают за компиляцию, как компилировать сжатый файл что б был меньше размером, разберетесь сами. В справке прям вначале написано какие фвйлы за что отвечают.
Жмем на файл правой кнопкой мыши и выбираем Cоmpile Script(х86) не зависимо от установленной системы что бы избежать не предвиденных проблем в дальнейшем. Не все функции поддерживают х64.
Скомпилировали. Получили файл FileGetEncoding.exe. Кладем его в папку со своим проектом. Переходим в проект и пишем код откуда будем вызывать написанные нами функции.
Все. Выполняем FileGetEncoding или WinGetHandle и наблюдаем за переменной [ConsoleBuffer]. В первом случае будет число или -1 при ошибке. Во втором случае дескриптор окна или 1, если окно не найдено с таким заголовком.
Одного или двух параметров будет всегда достаточно. Один когда нужно выполнить функцию без параметров. Два - когда с параметрами.
Крякозябры в отладчике или просто скопировал и после буфера обмена получил? Что бы после буфера нормально отображалась кирилица, копировать нужно при русской раскладке клавиатуры.
Добавлено (05 Июля 2023, 19:34) --------------------------------------------- mkg, кстати используя Autolt, нужда во многих плагинах отпадет. Можно под себя написать нужные команды. Файл из ехе можно переименовать в dll, он так же будет работать. Язык Autolt похож на NEO, так что думаю у многих проблем не возникнет. Короче требуется изучение вопроса. Я только поверхностно пробежался. NEO в связке с Autolt дает широкие возможности.
Добавлено (05 Июля 2023, 19:41) ---------------------------------------------
Цитатаmkg ()
Перекодировал что попало под руку в СР866. Результат:
ConsoleBuffer=0x000E112C
Что то сразу не обратил внимания. При чем здесь перекодировал и дескриптор окна? 0x000E112C это дескриптор окна.
В шаблоне выше две функции. Одна определяет кодировку. Другая дескриптор окна по заголовку или если заголовок не указан, верхнего активного.
Эти команды, вызывают функцию определения кодировки. Помести их в кнопку и запусти проект. При выборе файла увидишь результат в переменной ConsoleBuffer. Функция в шаблоне FileGetEncoding.
Это все равно как вызвать подпрограмму в NeoBook, WisualNeoWin. Подпрограмм много, а вызывается нужная по ее имени. Так и в шаблоне, написано 2 функции и каждая вызывается по ее имени.
[PubDir]FileGetEncoding.exe = путь к нашему скомпилированному файлу. У него могло быть любое название. " FileGetEncoding [#34][FileName][#34]" FileGetEncoding = 1 параметр. Название вызываемой функции. [#34][FileName][#34] = 2 параметр. Путь к файлу. Здесь можно писать по несколько параметров для других функций соблюдая структуру передачи параметров.
Это уже вызывает другую функцию из скомпилированного файла.
Здесь у нас в качестве параметров передается: " WinGetHandle [#34]Безымянный проект VisualNeo[#34]" WinGetHandle = 1 параметр. Название вызываемой функции. [#34]Безымянный проект VisualNeo[#34] = заголовок окна, по которому нужно получить дескриптор.
В одном файле можно написать хоть 100 функций и вызывать нужную из одного файла. Примерно как в плагине, только без окон помощников. Для себя просто нужно памятку писаь, что бы в следующий раз знать, какая функция за что отвечает.
Здесь я просто показал как можно для себя писать и вызывать функции.
Добавлено (05 Июля 2023, 22:23) --------------------------------------------- mkg, смотри в шаблон выше. Вот это:
Код
;Получить кодировку файла 1параметр = название функции, 2 параметр = путь к файлу: If $param1 = "FileGetEncoding" Then _FileGetEncoding($param2) EndIf
Вызывает функцию FileGetEncoding. Если $param1 = "FileGetEncoding" то вызывается функция расположенная ниже:
Код
;Получить кодировку файла: Func _FileGetEncoding($param2) Local $iResult = FileGetEncoding ($param2) ; Возвращает кодировку файла запущенного скрипта If @error Then ConsoleWrite (@error) ;Вернет -1 если ошибка Else ConsoleWrite ($iResult) ;Вернет 0 = ANSI, 32 = UTF16 Little Endian, 64 = UTF16 Big Endian, 128 = UTF8 (с BOM), 256 = UTF8 (без BOM), 512 = Кириллица ? EndIf EndFunc
; Получить дескриптор указанного окна. If $param1 = "WinGetHandle" Then _WinGetHandle($param2) EndIf
Вызывает функцию WinGetHandle. Расположенную еще ниже.
Код
; Получить дескриптор указанного окна. Func _WinGetHandle($param2) Local $iResult = WinGetHandle ($param2) ; Получить дескриптор указанного окна. If @error Then ConsoleWrite (@error) ;Вернет 1 если нет окон Else ConsoleWrite ($iResult) ;Вернет дескриптор EndIf EndFunc
И вот таким методом ты можешь добавлять любые другие функции которые тебе понадобятся. Читаешь справку Autolt с описанием функций (команд), и пишешь то, что тебе надо.
При том раскладе что я дал выше, результат всегда будет в переменной [ConsoleBuffer].
Код
ConsoleWrite ($Здесь переменная Autolt или текст , или еще что то)
Выводится в консоль. Плагин Дембля считывает это и выводить в переменную [ConsoleBuffer].
Надеюсь доходчиво объяснил. Не копируйте все подряд. Попробуйте разобраться сначала, как и почему это работает. Что не понятно, подскажу, если сам разберусь. Не хочешь читать хелп?
создаешь в проекте кнопку и вставляешь туда на событие маус клик.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ЧТО ОЗНАЧАЮТ КОМАНДЫ В КОДЕ\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
#NoTrayIcon (создать консольное приложение)
Local $iResult(объявить переменную $iResult)= (присвоить переменной $iResult) FileGetEncoding ($CmdLine[1]) (Вызванную функцию FileGetEncoding в которую передается путь к файлу находящийся в переменной $CmdLine[1]) If @error (если ошибка) Then (то) ConsoleWrite (@error) (записать в консоль 1, которая будет находится в переменной @error) Else (или) ConsoleWrite ($iResult)(Записать в консоль результат, который будет находится в переменной $iResult. Вернет 0 = ANSI, 32 = UTF16 Little Endian, 64 = UTF16 Big Endian, 128 = UTF8 (с BOM), 256 = UTF8 (без BOM), 512 = Кириллица под ?, так как в справке этого нет, но у меня возвращает именно это число) EndIf (конец условия)
Теперь надеюсь если сопоставишь с кодом из первого поста, разберешься.
А в первом посте, я показал как вызывать несколько функций из одного файла. Т.е. не делать для каждой функции отдельный файл, а написать сразу несколько и при необходимости вызывать нужную. По сути тот же плагин, только без окон помощника. И тот кто уже разбирается в WisualNeoWin, при небольших умственных усилиях сможет написать для себя много нужных команд, без поиска плагина.
Я думаю, что практически все что есть в плагинах, можно будет каждому для себя сделать с помощью Autolt . Не хочешь читать хелп?