Autorun
Select messages from
# through # FAQ
[/[Print]\]
Goto page Previous  1, 2, 3 ... , 142, 143, 144  Next  :| |:
Total Commander -> Плагины Total Commander

#2131:  Author: Orion9 PostPosted: Thu Jun 13, 2024 11:09
    —
Loopback wrote:
Code:

RegisterCommand 60000 MyCommand

Func MyCommand(lParam)
EndFunc

Т.е. если зарегистрировать команду с именем au_MyCommand, то можно будет потом использовать ее в кнопке или меню обычным образом:
Code:
TOTALCMD#BAR#DATA
au_MyCommand


Вызов команды Autorun

0
0

Code:
MENUITEM "Вызов команды Autorun", au_MyCommand

Куда уж лучше Laughing
Но один очень важный момент. А можно ли будет передавать параметры таким командам, и что значит Func MyCommand(lParam)

#2132:  Author: Loopback PostPosted: Thu Jun 13, 2024 12:33
    —
Orion9 wrote:
Т.е. если зарегистрировать команду с именем au_MyCommand, то можно будет потом использовать ее в кнопке или меню обычным образом:

Нет, к сожалению именно со своим префиксом не получится, тотал такие строки не пропускает. Но можно создать в TOTALCMD.INC соответствие, например, cm_MyCommand=60000; (можно даже группу под них создать), тогда именно так и будет работать. Но я бы в любом случае советовал пользоваться числами, особенно в меню, это немного быстрее.

На самом деле я не уверен, что стоит афишировать эту возможность с правкой TOTALCMD.INC. Всегда возникают опасения, как автор отнесётся к таким нововведениям. Хотя сопоставления значков правят все кому не лень, TOTALCMD.INC вроде бы не предполагается для правки. Хотя могу и ошибаться.

Orion9 wrote:
А можно ли будет передавать параметры таким командам, и что значит Func MyCommand(lParam)

Можно из панели инструментов. Но только число, и только одно, и только если использовать запись команды строкой, а в TOTALCMD.INC есть сопоставление. Почему-то при задании команды в кнопке числом параметры не принимаются (так, кстати, и со стандартными внутренними командами, принимающими параметры).

Из меню, понятно, этого сделать нельзя, пока функционал не будет добавлен Гислером.

Также можно отправлять сообщение с PostMessage (именно Post) WM_USER+51 с wParam=номер команды, lParam - дополнительный параметр.

#2133:  Author: Orion9 PostPosted: Thu Jun 13, 2024 14:00
    —
Loopback wrote:
На самом деле я не уверен, что стоит афишировать эту возможность с правкой TOTALCMD.INC.

Я думаю, раз уж этот файл вынесен в том виде, как он сейчас есть, отдельно в каталоге, такая правка подразумевается Smile
Loopback wrote:
Из меню, понятно, этого сделать нельзя, пока функционал не будет добавлен Гислером.

Да, я понял. Очень жаль. Ведь по сути бывает нужен не только вызов функции Autorun, но вызов с параметрами:
Code:
txt = txt & 'MENUITEM "Запуск 1,2 ", fStart(1,2)' & auCRLF

Func fStart(param1, param2)
EndFunc

Или
Code:
txt = txt & 'MENUITEM "Запуск 1,2 ", fStart, 1, 2' & auCRLF

Но если будет возможность вызывать без параметров, то это тоже будет большой буст.)
Loopback wrote:
Также можно отправлять сообщение с PostMessage (именно Post) WM_USER+51 с wParam=номер команды, lParam - дополнительный параметр.

Посмотрим, как оно будет на практике. Но то, что можно будет одну циферЬку передать, это тоже большой плюсик Smile

#2134:  Author: Loopback PostPosted: Thu Jun 13, 2024 15:37
    —
Orion9 wrote:
Я думаю, раз уж этот файл вынесен в том виде, как он сейчас есть, отдельно в каталоге, такая правка подразумевается

На самом деле может быть, поскольку там же есть далеко не все команды. Например, cm_RightViewMode9=8259;etc. until 8499. Строки есть только до 9, а вдруг кому cm_RightViewMode199 понадобится?

Orion9 wrote:
Очень жаль. Ведь по сути бывает нужен не только вызов функции Autorun, но вызов с параметрами

А, я про это кажется просто не упоминал. RegisterCommand позволяет добавлять внутренние параметры к функции. Можно просто нарегистрировать номеров на одну функцию, но с разными параметрами:

Code:

RegisterCommand 60001 MyCommand 1
RegisterCommand 60002 MyCommand 2
RegisterCommand 60003 MyCommand 3

Func MyCommand(lParam, Param1)

EndFunc


Регистрация номера - по-сути просто сопоставление его с функцией, так что регистрация даже большого числа номеров это довольно "дёшево" в плане производительности.

#2135:  Author: Orion9 PostPosted: Thu Jun 13, 2024 17:14
    —
Loopback wrote:
Можно просто нарегистрировать номеров на одну функцию, но с разными параметрами

Великолепно Smile
Loopback wrote:
Регистрация номера - по-сути просто сопоставление его с функцией, так что регистрация даже большого числа номеров это довольно "дёшево" в плане производительности.

Теперь все ясно. Я просто никогда не использовал номер команды в кнопке, поэтому сразу как-то не до конца понял.

Безусловно, нет смысла заморачиваться с TOTALCMD.INC. Большое число команд в виде номеров может, конечно, сделать код менее читаемым, но это лучше, чем заботится о нескольких источниках и заниматься дополнительным сопоставлением.

В обшем, не терпится попробовать )

#2136:  Author: Orion9 PostPosted: Fri Jun 14, 2024 00:32
    —
Loopback
Начал делать финальный тест скрипта на чистом ТС. Прошел все стадии от начальной установки Autorun и его плагинов до намеренного измения путей конфигурации в .aucfg файле, чтобы посмотреть, как все будет работать. В принципе, больших проблем пока не нашел, кроме одной. Значки в меню, вызываемом ShowPopupMenu перестали отображаться. Сначала не понял, в чем может быть дело, но потом пришел к выводу, что это как-то связано с тем фактом, что мне пришлось перенести usercmd.ini в AppData\Roaming\GHISLER\ из-за того, что конфигурация ТС чистая и wincmd.ini по умолчанию сохраняется там. Можете подтвердить проблему?

Кстати, команды из меню работают. Т.е. сами em_ команды вызываются из usercmd.ini, не отображаются только значки.

#2137:  Author: sa PostPosted: Fri Jun 14, 2024 09:14
    —
Orion9 wrote:
Значки в меню, вызываемом ShowPopupMenu перестали отображаться.

В стандартном WCMICONS.DLL всего 87 значков, а в файле меню указывались значки с номером 150.
Может, в этом причина?

#2138:  Author: Orion9 PostPosted: Fri Jun 14, 2024 11:55
    —
sa wrote:
В стандартном WCMICONS.DLL всего 87 значков, а в файле меню указывались значки с номером 150.

Да. И это было неправильно. Smile В новой версии я это учел и перешел на em_ команды. Включение и выключение заголовка сейчас происходит либо из самого скрипта:
Code:
[em_title_on]
button=%COMMANDER_EXE%,37
cmd=%TITLE_AHKV2%
param=Title.ahk -tc-title-on
path=%TITLE_PATH%

[em_title_off]
button=%COMMANDER_EXE%,36
cmd=%TITLE_AHKV2%
param=Title.ahk -tc-title-off
path=%TITLE_PATH%

Либо утилитой TCFS2:
Code:
[em_title_on_tcfs2]
button=%COMMANDER_EXE%,37
cmd=%TITLE_TCFS2%
param=/ef "set_ini(`%%TITLE_PATH%%\Config.ini`,Title, Show, 1) msg(regmsg(TitleMessage), 0, 0)"
path=%TITLE_PATH%

[em_title_off_tcfs2]
button=%COMMANDER_EXE%,36
cmd=%TITLE_TCFS2%
param=/ef "set_ini(`%%TITLE_PATH%%\Config.ini`,Title, Show, 0) msg(regmsg(TitleMessage), 0, 0)"
path=%TITLE_PATH%

Т.е. значки в этих командах берутся из самого .exe файла.

А пункт меню с часами вызывает сейчас команду:
Code:
[em_timedate_cpl]
button=timedate.cpl
cmd=rundll32.exe shell32.dll,Control_RunDLL timedate.cpl

Но значок тоже не отображается.

В то же время, есть второе меню в виде bar-файла как и раньше, но оно теперь тоже с em_ командами:
Quote:
[Buttonbar]
Buttoncount=17
button1=%COMMANDER_EXE%,37
cmd1=em_title_on_tcfs2
iconic1=0
menu1=Включить
button2=%COMMANDER_EXE%,36
cmd2=em_title_off_tcfs2
iconic2=0
menu2=Выключить

Но значки в заголовке при его вызове тоже не отображаются. Однако если разместить bar-файл на панели, значки появляются.

P.s.
Сейчас буду пробовать портабельный вариант с wincmd.ini и usercmd.ini в корне ТС. Вчера просто не успел.

#2139:  Author: Loopback PostPosted: Fri Jun 14, 2024 12:00
    —
Orion9 wrote:
Можете подтвердить проблему?

Быстро подготовить такую конфигурацию сейчас не смогу, но если смотреть по коду, то да, скорее всего usercmd.ini не будет найден, т.к. сейчас путь берется из переменной COMMANDER_PATH, а в такой конфигурации это неверно. Надо брать из переменной COMMANDER_INI_PATH, но учитывая, что она появилась только в последней версии, придется получать из COMMANDER_INI. Как-то я забываю, что тотал не только в портабельном варианте ставят.

Orion9 wrote:
Кстати, команды из меню работают. Т.е. сами em_ команды вызываются из usercmd.ini, не отображаются только значки.

Команды вызываются, потому что Autorun просто через API тотала имя команды передает (которое в свою очередь берёт в меню), а значки, естественно, сам читает Smile

#2140:  Author: Orion9 PostPosted: Fri Jun 14, 2024 12:14
    —
Loopback
Quote:
Как-то я забываю, что тотал не только в портабельном варианте ставят.

Да вот и я об этом тоже как-то забываю Laughing Тем и полезны подобные тесты.)

#2141:  Author: Loopback PostPosted: Fri Jun 14, 2024 14:31
    —
Версия Autorun 2.2.11 beta

 История изменений


К сожалению, работа над этой бетой пошла не так, как хотелось бы, поэтому и сроки затянулись, и объем накопился значительный. Так что в дополнение к длинному списку изменений будет много разъясняющей писанины. Так или иначе, на данный момент можно считать что все глобальные планы были реализованы (хоть и с оговорками).

Объекты

Изначально объектный синтаксис вообще не планировался. Собирался сделать только какой-нибудь списочный тип данных, с которым можно было бы работать по индексам. Какое-то подобие можно было изобразить и имеющимися средствами:

Code:

For i = 1 to 10
  Set %'"var" & i' %'i*10'
Next 

MsgBox %'Eval("var" & 4)'


Но выглядит это довольно устрашающе.

Понятно, что для работы с массивом пришлось добавлять синтаксис сабскриптов для обращения к переменной в виде var[index]. Ну а дальше, учитывая что массив это комплексный тип данных, объектный синтаксис добавился как-то естественно и породил новую сущность - объект.

В данный момент объекта два - List и Plugin. Почему List а не Array: c существующим API, похоже, я уперся в потолок. Реализовать массив так, как хотелось - с автоматическим контролем времени жизни - не выходит. Получается кривой, нестабильно работающий набор костылей. В то же время есть желание оставить свободу манёвра и не занимать имя Array, на случай появления возможности сделать более правильный массив.

Таким образом, в данный момент главное ограничение объектов - это то, что их нужно освобождать вручную функцией Free. В этом смысле они близки к объектам Delphi (типа TStringList). Если объект не освободить явно, то он все равно освободится при выгрузке плагина, но до того момента потребление памяти будет постоянно расти. В скриптовых языках массивы обычно освобождаются автоматически, когда переменная выходит из зоны видимости.

Второе ограничение: обращение через точку и с сабскриптом возможно только к одному объекту, не "нанизывая" их:

Code:

# не будет работать
r = obj1.prop.item[2]

# так правильно
prop = obj1.prop
r = prop.item[2]


Третье (условное) ограничение - нет традиционных обработчиков исключений. Но здесь нет и работы со сторонними объектами, а методы могут устанавливать переменную error, как и функции.

Не стоит строить завышенных ожиданий насчет объектов. Цели внедрить полноценную объектную модель не стояло. Это скорее просто расширение синтаксиса, а объекты созданы в первую очередь для инкапсуляции данных и удобной работы с ними. Создания своих не планируется, это избыточно, да и реализация их при существующей архитектуре будет набором костылей.

Собственно, объекты и стали камнем преткновения - оставлять их в таком виде или нет, отчего период выхода бет сильно затянулся. В итоге решено было оставить, поскольку, как мне кажется, удобство использования всё равно перевешивает неудобства имеющихся ограничений. Да и ограничением это можно считать только для массива.

Дополнительные поля

Добавлена возможность создания из скрипта дополнительных полей, т.е. Autorun может выступать в роли обычного WDX плагина, только с формированием данных в скрипте. Фича достаточно несложная и тут без особых сюрпризов, если не считать того, что скриптовая часть не отличается высокой скоростью работы. Перспективы для оптимизации есть, но все равно, я бы не рассматривал это как полноценную замену тому же WinScript Advanced. Зато представляется более полезным для продвинутого формирования данных для стандартных подсказок тотала на основе данных других плагинов, т. е. по типу super_wdx.

Прочее

Также есть еще несколько существенных изменений, которые требуют внимания и тестирования:


  1. Переделана работа пользовательских функций в многопоточном режиме. Раньше использование одной функции из разных потоков было чревато спонтанными ошибками. Сейчас в разных потоках выполняется свой экземпляр функции и больше таких проблем быть не должно.
  2. Запуск и остановка скрипта перенесены в функции ContentSetDefaultParams и ContentPluginUnloading соответственно. Тестирую в этом режиме уже давно и как мне кажется, работа стала существенно стабильнее, особенно при выгрузке плагина с cm_UnloadPlugins. Каких-то побочных эффектов не заметил.
  3. Затронуты функции, загружающие что-то резидентно (LoadLibrary, RunThread, ShellExecute с ключами /T и /TT, LoadFont),т.к. переделан метод хранения этих данных.
  4. Был заметный баг, когда переменные могли напрямую разворачиваться в строчных и некоторых других функциях, чего быть не должно (в т.ч. согласно документации). Не исключено, что у кого-то мог код быть завязан на этом баге.


В остальном добавлены полезные и не очень функции, исправлено множество багов и наверняка добавлена куча новых.

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

#2142:  Author: Orion9 PostPosted: Sat Jun 15, 2024 00:45
    —
Quote:
Версия Autorun 2.2.11 beta

Да, изменений накопилось немало Smile Будем постепенно пробовать и применять. Пока проверил со своим скриптом - вроде все работает. Проблема со значками исчезла после того, как я положил uercmd.ini в корень ТС. Но правда только после принудительного изменения и сохранения настроек в диалоге "Значки" -> "Значки главного меню". Прикладываю скрипт. Изменений тоже много. Все подробности в файле readme.

 Hidden text

#2143:  Author: Loopback PostPosted: Sat Jun 15, 2024 22:18
    —
Orion9 wrote:
Пока проверил со своим скриптом - вроде все работает.

Уже хорошо. Хотя предыдущую версию скрипта я тоже смотрел на рабочей версии Autorun.

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

Orion9 wrote:
Проблема со значками

По значкам - скорее всего завтра будет хотфикс, я там с Plugin накосячил, под x64 не работает и на флаг не реагирует. Заодно поправлю пути значков.

#2144:  Author: Orion9 PostPosted: Sun Jun 16, 2024 12:59
    —
Loopback
Что ж вы делаете? Только я хотел уйти на заслуженный покой, а тут: GetNetInterface, GetNetInterfaceInfo, GetMemStats, GetDriveSpace, GetCPUUsage, GetCoreTempInfo Laughing

У меня только один вопрос:

 Hidden text


На счёт специфики, согласен. Формат readme не позволил делать лирических отступлений, но наверное, пара пояснений не была бы лишней.

На счет погоды.
Долгое время я пользовался заставкой YoWindow и очень к ней привык:
https://yowindow.ru
Но в итоге пришлось от нее отказаться из-за Adobe Flash. Равноценной замены так и не нашел, да и не сильно забивал этим голову, если честно, но вот из каких источников они брали сведения о погоде, я посмотрел:
https://yowindow.ru/help.php#q2
Поэтому Metar именно отсюда, но я не планировал использовать его для заголовка: просто сделал парсинг html ради интереса - посмотреть, что это даст и как оно будет смотреться.)

Вообще-то, все со стартовой страницы Яндекс началось. Там есть инфомеры о погоде, курсах валют и о пробках. Решил просто попробовать извлечь эти данные оттуда несложной обработкой сохраненной веб-страницы и вывести их в заголовок. И... получилось Laughing

Все остальное - это просто развитие темы. Кстати:

 Hidden text


Пингу тоже можно найти приминение, а вот что касается Uptime, то в домашних условиях он может быть полезен, если система не выключается, а уходит в сон или гибернируется. Раньше я пользовался гибернацией и заметил, что чем дольше Windows работает без перезагрузки, тем больше всяких косяков и "сюрпризов" всплывает наружу. Поэтому даже повесил себе виджет на рабочий стол, чтобы сразу было видно количество дней непрерывной работы:
http://win-gadgets.net/system-gadget/165-uptime.html
Кстати, Uptime.vbs именно отсюда. Когда я решил его добавить в набор, то совсем забыл, что у Autorun есть собственная функция для получения секунд Laughing Но когда спохватился, решил уже ничего не менять в aucfg, и оставил его до кучи.) Скрипт сам по себе рабочий, может кому и пригодится для каких целей.

P.s.
Сложно придумать, что еще можно вывести в заголовок. Посмотрев "клондайк" различных API, ничего полезного не нашел. Ну не заголовки же новостей сюда тащить в самом деле Mr. Green

#2145:  Author: Loopback PostPosted: Sun Jun 16, 2024 13:14
    —
Версия Autorun 2.2.11.1 beta
Хотфикс к последней бете, с исправлением Plugin (и заодно путей в Tweaks).

Orion9 wrote:
а тут: GetNetInterface, GetNetInterfaceInfo, GetMemStats, GetDriveSpace, GetCPUUsage, GetCoreTempInfo

А ведь это еще в прошлом году был запрос...

Orion9 wrote:
Пингу тоже можно найти приминение

Про пинг как раз и вопросов нет, полезная штука Smile

По остальному тоже всё ясно. Серьезно, на самом деле интересно смотрится, особенно в эти моменты c Pinging..., Retrieving data Smile



Total Commander -> Плагины Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page Previous  1, 2, 3 ... , 142, 143, 144  Next  :| |:
Page 143 of 144

Powered by phpBB © 2001, 2005 phpBB Group