View previous topic :: View next topic |
Author |
Message |
Orion9

Joined: 01 Jan 2024 Posts: 786
|
(Separately) Posted: Thu Jun 13, 2024 11:09 Post subject: |
|
|
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
|
Куда уж лучше
Но один очень важный момент. А можно ли будет передавать параметры таким командам, и что значит Func MyCommand(lParam) |
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1545
|
(Separately) Posted: Thu Jun 13, 2024 12:33 Post subject: |
|
|
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 - дополнительный параметр. |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 786
|
(Separately) Posted: Thu Jun 13, 2024 14:00 Post subject: |
|
|
Loopback wrote: | На самом деле я не уверен, что стоит афишировать эту возможность с правкой TOTALCMD.INC. |
Я думаю, раз уж этот файл вынесен в том виде, как он сейчас есть, отдельно в каталоге, такая правка подразумевается
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 - дополнительный параметр. |
Посмотрим, как оно будет на практике. Но то, что можно будет одну циферЬку передать, это тоже большой плюсик  |
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1545
|
(Separately) Posted: Thu Jun 13, 2024 15:37 Post subject: |
|
|
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
|
Регистрация номера - по-сути просто сопоставление его с функцией, так что регистрация даже большого числа номеров это довольно "дёшево" в плане производительности. |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 786
|
(Separately) Posted: Thu Jun 13, 2024 17:14 Post subject: |
|
|
Loopback wrote: | Можно просто нарегистрировать номеров на одну функцию, но с разными параметрами |
Великолепно
Loopback wrote: | Регистрация номера - по-сути просто сопоставление его с функцией, так что регистрация даже большого числа номеров это довольно "дёшево" в плане производительности. |
Теперь все ясно. Я просто никогда не использовал номер команды в кнопке, поэтому сразу как-то не до конца понял.
Безусловно, нет смысла заморачиваться с TOTALCMD.INC. Большое число команд в виде номеров может, конечно, сделать код менее читаемым, но это лучше, чем заботится о нескольких источниках и заниматься дополнительным сопоставлением.
В обшем, не терпится попробовать ) |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 786
|
(Separately) Posted: Fri Jun 14, 2024 00:32 Post subject: |
|
|
Loopback
Начал делать финальный тест скрипта на чистом ТС. Прошел все стадии от начальной установки Autorun и его плагинов до намеренного измения путей конфигурации в .aucfg файле, чтобы посмотреть, как все будет работать. В принципе, больших проблем пока не нашел, кроме одной. Значки в меню, вызываемом ShowPopupMenu перестали отображаться. Сначала не понял, в чем может быть дело, но потом пришел к выводу, что это как-то связано с тем фактом, что мне пришлось перенести usercmd.ini в AppData\Roaming\GHISLER\ из-за того, что конфигурация ТС чистая и wincmd.ini по умолчанию сохраняется там. Можете подтвердить проблему?
Кстати, команды из меню работают. Т.е. сами em_ команды вызываются из usercmd.ini, не отображаются только значки. |
|
Back to top |
|
 |
sa
Joined: 29 Apr 2009 Posts: 2693
|
(Separately) Posted: Fri Jun 14, 2024 09:14 Post subject: |
|
|
Orion9 wrote: | Значки в меню, вызываемом ShowPopupMenu перестали отображаться. |
В стандартном WCMICONS.DLL всего 87 значков, а в файле меню указывались значки с номером 150.
Может, в этом причина? |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 786
|
(Separately) Posted: Fri Jun 14, 2024 11:55 Post subject: |
|
|
sa wrote: | В стандартном WCMICONS.DLL всего 87 значков, а в файле меню указывались значки с номером 150. |
Да. И это было неправильно. В новой версии я это учел и перешел на 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 в корне ТС. Вчера просто не успел. |
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1545
|
(Separately) Posted: Fri Jun 14, 2024 12:00 Post subject: |
|
|
Orion9 wrote: | Можете подтвердить проблему? |
Быстро подготовить такую конфигурацию сейчас не смогу, но если смотреть по коду, то да, скорее всего usercmd.ini не будет найден, т.к. сейчас путь берется из переменной COMMANDER_PATH, а в такой конфигурации это неверно. Надо брать из переменной COMMANDER_INI_PATH, но учитывая, что она появилась только в последней версии, придется получать из COMMANDER_INI. Как-то я забываю, что тотал не только в портабельном варианте ставят.
Orion9 wrote: | Кстати, команды из меню работают. Т.е. сами em_ команды вызываются из usercmd.ini, не отображаются только значки. |
Команды вызываются, потому что Autorun просто через API тотала имя команды передает (которое в свою очередь берёт в меню), а значки, естественно, сам читает  |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 786
|
(Separately) Posted: Fri Jun 14, 2024 12:14 Post subject: |
|
|
Loopback
Quote: | Как-то я забываю, что тотал не только в портабельном варианте ставят. |
Да вот и я об этом тоже как-то забываю Тем и полезны подобные тесты.) |
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1545
|
(Separately) Posted: Fri Jun 14, 2024 14:31 Post subject: |
|
|
Версия Autorun 2.2.11 beta
 История изменений
* обновлена руссская справка, языковый файл, мелкие обновления API в плагинах
+ добавлена команда RegisterCommand
* оптимизирован вывод информации об ошибках при вызове функций из CSMA, SHA и т.д.
+ добавлены функции IsInt и IsFloat
- исправлена ошибка с возможным разворачиванем переменных, там где это не предусмотрено (например, в строчных функциях)
* изменена работа LoadLibrary, RunThread, ShellExecute, LoadFont, добавлена совместимость с GetState
+ LoadFont возвращает число фактически загруженных шрифтов в extended
- LoadFont не разворачивала переменные в имени шрифта
- исправлена проблема с ограничением параметра длины в функции StrLeft 127 символами
+ добавлен функционал WDX-плагина
+ добавлен макрос extended, функция SetExtended
- исправлена некорректная обработка чисел с плавающей точкой со значением от 0 до 1
+ добавлена функция FileGetVersion
* изменена загрузка библиотек, плагины не будут загружаться многократно
- Tweaks: позиционирование на функциональных кнопках в ControlSetMouseAction, ControlSetHint, ShowPopupMenu
+ Runtime: добавлена функция RequestCopyDataInfo
+ добавлена функция StrFormat
- исправлена невозможность использования "_" в начале имен переменных и функций
+ в API добавлена возможность вызова функции Autorun_PluginFinish
+ Tweaks: добавлены функции для работы с подсказками ShowHint, ControlSetHint, SetHintParam
- Tweaks: исправлена проблема с пробелами в путях в ShowPopupMenu
- Tweaks: исправлена серьезная проблема с порчей памяти
+ добавлена функция GetState
* полноценная работа пользовательских функций в многопоточном режиме
+ добавлен объект Plugin
+ директива AutorunFinalizeSection теперь разрешена только в главном файле скрипта
- исправлена ошибка с относительными путями подключаемых файлов
- Process: исправлен размер буфера в ProcessExecGetOutput
- в команде FileExist не работало разворачивание переменных
+ добавлена новая сущность - объект, добавлен объект List
+ Tweaks: переключатель \W в функции SetHotkeyAction, разрешающий работу горячих клавиш в дочерних окнах TC
- Tweaks: убран лимит на количество элементов меню
- Tweaks: исправлена некорректная работа ShowPopupMenu c файлами в UTF-16
- Tweaks: исправлена некорректная работа парсера *.bar файлов с длинными строками
- Tweaks: исправлена работа с переменными в ShowPopupMenu
+ добавлена команда SetError
- локальная переменная в функциях не перекрывала глобальную при дальнейших операциях после инициализации
- ошибка парсера, не позволявшая создавать имена функций, начинающихся с ключевого слова, например "IfEnabled"
- исправлена утечка памяти при использовании функций
+ добавлено ключевое слово Static
- ненужное сообщение об ошибке в функциях с открытым списком параметров
- исправлено падение на пустых строках в StrPart (возможно, также StrPos)
+ Sysinfo: добавлены функции GetNetInterface, GetNetInterfaceInfo
+ добавлены функции FileGetAttr и FileSetAttr
+ добавлены функции Date и Time
+ Sysinfo: добавлены функции GetMemStats, GetDriveSpace, GetCPUUsage, GetCoreTempInfo
* запуск и остановка скрипта из DllMain перенесены в функции ContentSetDefaultParams и ContentPluginUnloading
- исправлена работа оператора <> для строк
- исправлены неработающие сравнения, когда результат не равен 0 или 1
- исправлено падение ТК при выгрузке плагина командой cm_UnloadPlugins при использовании RunThread
К сожалению, работа над этой бетой пошла не так, как хотелось бы, поэтому и сроки затянулись, и объем накопился значительный. Так что в дополнение к длинному списку изменений будет много разъясняющей писанины. Так или иначе, на данный момент можно считать что все глобальные планы были реализованы (хоть и с оговорками).
Объекты
Изначально объектный синтаксис вообще не планировался. Собирался сделать только какой-нибудь списочный тип данных, с которым можно было бы работать по индексам. Какое-то подобие можно было изобразить и имеющимися средствами:
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.
Прочее
Также есть еще несколько существенных изменений, которые требуют внимания и тестирования:
- Переделана работа пользовательских функций в многопоточном режиме. Раньше использование одной функции из разных потоков было чревато спонтанными ошибками. Сейчас в разных потоках выполняется свой экземпляр функции и больше таких проблем быть не должно.
- Запуск и остановка скрипта перенесены в функции ContentSetDefaultParams и ContentPluginUnloading соответственно. Тестирую в этом режиме уже давно и как мне кажется, работа стала существенно стабильнее, особенно при выгрузке плагина с cm_UnloadPlugins. Каких-то побочных эффектов не заметил.
- Затронуты функции, загружающие что-то резидентно (LoadLibrary, RunThread, ShellExecute с ключами /T и /TT, LoadFont),т.к. переделан метод хранения этих данных.
- Был заметный баг, когда переменные могли напрямую разворачиваться в строчных и некоторых других функциях, чего быть не должно (в т.ч. согласно документации). Не исключено, что у кого-то мог код быть завязан на этом баге.
В остальном добавлены полезные и не очень функции, исправлено множество багов и наверняка добавлена куча новых.
Справка пока только русская, английскую буду делать чуть позже, когда по новому функционалу в русской будут исправлены основные косяки, а то потом сложнее править параллельно в двух. |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 786
|
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1545
|
(Separately) Posted: Sat Jun 15, 2024 22:18 Post subject: |
|
|
Orion9 wrote: | Пока проверил со своим скриптом - вроде все работает. |
Уже хорошо. Хотя предыдущую версию скрипта я тоже смотрел на рабочей версии Autorun.
А так, конечно, впечатляет. Набор фич лично для меня несколько специфический (несколько погодных сервисов, курсы в заголовке), но в любом случае выглядит интересно и хороший старт для модификаций. Плюс неплохой тест возможностей и стабильности движка.
Orion9 wrote: | Проблема со значками |
По значкам - скорее всего завтра будет хотфикс, я там с Plugin накосячил, под x64 не работает и на флаг не реагирует. Заодно поправлю пути значков. |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 786
|
(Separately) Posted: Sun Jun 16, 2024 12:59 Post subject: |
|
|
Loopback
Что ж вы делаете? Только я хотел уйти на заслуженный покой, а тут: GetNetInterface, GetNetInterfaceInfo, GetMemStats, GetDriveSpace, GetCPUUsage, GetCoreTempInfo
У меня только один вопрос:
 Hidden text Где Smart часы? 
На счёт специфики, согласен. Формат readme не позволил делать лирических отступлений, но наверное, пара пояснений не была бы лишней.
На счет погоды.
Долгое время я пользовался заставкой YoWindow и очень к ней привык:
https://yowindow.ru
Но в итоге пришлось от нее отказаться из-за Adobe Flash. Равноценной замены так и не нашел, да и не сильно забивал этим голову, если честно, но вот из каких источников они брали сведения о погоде, я посмотрел:
https://yowindow.ru/help.php#q2
Поэтому Metar именно отсюда, но я не планировал использовать его для заголовка: просто сделал парсинг html ради интереса - посмотреть, что это даст и как оно будет смотреться.)
Вообще-то, все со стартовой страницы Яндекс началось. Там есть инфомеры о погоде, курсах валют и о пробках. Решил просто попробовать извлечь эти данные оттуда несложной обработкой сохраненной веб-страницы и вывести их в заголовок. И... получилось
Все остальное - это просто развитие темы. Кстати:
 Hidden text Не знаю, как на счет евро, но доллар можно оставить в заголовке, чтобы смотреть, как он будет неуклонно падать 
Пингу тоже можно найти приминение, а вот что касается Uptime, то в домашних условиях он может быть полезен, если система не выключается, а уходит в сон или гибернируется. Раньше я пользовался гибернацией и заметил, что чем дольше Windows работает без перезагрузки, тем больше всяких косяков и "сюрпризов" всплывает наружу. Поэтому даже повесил себе виджет на рабочий стол, чтобы сразу было видно количество дней непрерывной работы:
http://win-gadgets.net/system-gadget/165-uptime.html
Кстати, Uptime.vbs именно отсюда. Когда я решил его добавить в набор, то совсем забыл, что у Autorun есть собственная функция для получения секунд Но когда спохватился, решил уже ничего не менять в aucfg, и оставил его до кучи.) Скрипт сам по себе рабочий, может кому и пригодится для каких целей.
P.s.
Сложно придумать, что еще можно вывести в заголовок. Посмотрев "клондайк" различных API, ничего полезного не нашел. Ну не заголовки же новостей сюда тащить в самом деле  |
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1545
|
(Separately) Posted: Sun Jun 16, 2024 13:14 Post subject: |
|
|
Версия Autorun 2.2.11.1 beta
Хотфикс к последней бете, с исправлением Plugin (и заодно путей в Tweaks).
Orion9 wrote: | а тут: GetNetInterface, GetNetInterfaceInfo, GetMemStats, GetDriveSpace, GetCPUUsage, GetCoreTempInfo |
А ведь это еще в прошлом году был запрос...
Orion9 wrote: | Пингу тоже можно найти приминение |
Про пинг как раз и вопросов нет, полезная штука
По остальному тоже всё ясно. Серьезно, на самом деле интересно смотрится, особенно в эти моменты c Pinging..., Retrieving data  |
|
Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|