Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Autorun
Goto page Previous  1, 2, 3 ... , 141, 142, 143  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Orion9



Joined: 01 Jan 2024
Posts: 301

Post (Separately) Posted: Wed Jun 05, 2024 17:12    Post subject: Reply with quote

sa wrote:
Решение с добавлением Sleep(250) в начало autorun.cfg может приводить к неприятным последствиям.

Жаль. Казалось, что Доктор Сон прописал надежный костыль Laughing

Надо будет поэксперементировать вот с этим объявлением: Global JustTitle = WinGetText(), VarTitle = JustTitle

Попробовать инициализировать переменные в другом месте и в другое время и посмотреть, что из этого получится.

А тем временем скрипт на Autorun пробил 1000 строк, с чем я вас, Loopback, и поздравляю Laughing Тут даже Гислер бы воскликнул:

 Hidden text
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 301

Post (Separately) Posted: Fri Jun 07, 2024 14:27    Post subject: Reply with quote

Loopback
Была уже схожая проблема с открытым списком параметров, но тут обнаружил, что пример из справки
 Hidden text

тоже приводит к сообщению об ошибке "Слишком много актуальных параметров в вызове "MyFunc"", хотя сама функция потом отрабатывает нормально, т.е. как и должна. Жаль. Хотел использовать фичу "Параметр со значением по умолчанию" в одной из функций, но теперь придется, видимо, через глобальную переменную как-то решать.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1329

Post (Separately) Posted: Fri Jun 07, 2024 23:42    Post subject: Reply with quote

Orion9 wrote:
Жаль.

Всё давно исправлено, надеюсь что версия не за горами.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 301

Post (Separately) Posted: Sat Jun 08, 2024 11:36    Post subject: Reply with quote

Loopback
Похоже, есть еще проблема с функцией Abs. Пример из справки возвращает ноль на числе с дробной частью:
Code:
MsgBox(Abs(-5))     # --> 5
MsgBox(Abs(1.25))   # --> 1.25

Кстати, навело на мысль, что Autorun нужна функция типа IsInteger, чтобы проверять число, целое оно или нет.

Еще бы хотелось, чтобы ShowPopupMenu могла вызывать внутренние функции Autorun, а не только em_ команды из bar и mnu файлов.

Можно такое реализовать?
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1329

Post (Separately) Posted: Sat Jun 08, 2024 14:45    Post subject: Reply with quote

Orion9 wrote:
Похоже, есть еще проблема с функцией Abs.

Да, это всё связано с этим багом. Уже исправлено.

Orion9 wrote:
нужна функция типа IsInteger

И не только целое, может и IsNumber понадобиться. Но нужно понимать, что поскольку переменные - строки, такая функция будет сообщать не "тип переменной", а только то, может ли быть данная строка приведена к числу.

Orion9 wrote:
ShowPopupMenu могла вызывать внутренние функции Autorun

В теории и сейчас можно, с помощью костыля в виде регистрации сообщения и отправки тоталу em-команды, которая в свою очередь будет отправлять зарегистрированное сообщение Twisted Evil

А так что-то наверное можно. Самый простой вариант - сделать какой-то специальный маркер команды, например au_xxxxx (с надеждой, что Гислер в будущем не захочет сделать такой тип команд Very Happy) и использовать его в меню. Но это в определенном смысле ломает совместимость, т.к. при использовании меню в тотале такие пункты будут при нажатии выдавать ошибку. Еще минус, что в отличие от тотала, я не вижу где эти команды могут быть применимы, кроме меню. А ведь придется делать обвес для привязки внутренней функции к этой псевдокоманде (ну или для простоты сделать то что за au_ - именем функции). В общем это нужно обдумать, но идея на первый взгляд выглядит стоящей.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 301

Post (Separately) Posted: Sat Jun 08, 2024 18:25    Post subject: Reply with quote

Loopback wrote:
Да, это всё связано с этим багом. Уже исправлено.

Отлично! Very Happy
Loopback wrote:
поскольку переменные - строки, такая функция будет сообщать не "тип переменной", а только то, может ли быть данная строка приведена к числу.

Именно это и нужно, в принципе. Но только чтобы была еще проверка на отсутствие или присутствие дробной части, т.е. чтобы было понятно, целое это число или вещественное.
Loopback wrote:
В теории и сейчас можно, с помощью костыля в виде регистрации сообщения и отправки тоталу em-команды, которая в свою очередь будет отправлять зарегистрированное сообщение Twisted Evil

Я так и делаю.) Проблем нет, если это всего несколько команд, но когда их больше двух десятков, да еще и однотипных, как-то уже не фонтан. Да и потом, для вызова функций Autorun нужна внешняя утилита, а это еще одно лишнее звено. В итоге, чтобы запустить функцию Autorun из меню, нужно иметь не только саму функцию, но и отдельную em_ команду, прописанную специально для нее в usercmd.ini, а также утилиту TCFS2 или что-то другое, что пошлет сообщение окну ТС. Как-то слишком много посредников тут набирается Laughing
Loopback wrote:
Самый простой вариант - сделать какой-то специальный маркер команды, например au_xxxxx (с надеждой, что Гислер в будущем не захочет сделать такой тип команд Very Happy) и использовать его в меню.

Хороший вариант. А на счет au_xxxxx не беспокойтесь: вряд ли Маэстро захочет на старости лет что-то радикально менять.))
Loopback wrote:
Но это в определенном смысле ломает совместимость, т.к. при использовании меню в тотале такие пункты будут при нажатии выдавать ошибку.

Наверное, тут больше подразумевается, что меню, вызывающее внутренние функции Autorun, будет создаваться в самом скрипте с ключом /F. А если использовать внешние mnu файлы, то действительно можно наткнуться на неприятности, теоретически.
Loopback wrote:
Еще минус, что в отличие от тотала, я не вижу где эти команды могут быть применимы, кроме меню. А ведь придется делать обвес для привязки внутренней функции к этой псевдокоманде (ну или для простоты сделать то что за au_ - именем функции).

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

Еще более стоящая идея, которая давно напрашивается, - чтобы Маэстро хотя бы чуток подсобил и сделал отдельный интерфейс для взаимодействия с Autorun либо какой-то специальной командой, либо посылкой из ТС сообщения самому себе. Причём второй вариант гораздо хуже первого Smile
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1329

Post (Separately) Posted: Sat Jun 08, 2024 22:54    Post subject: Reply with quote

Orion9 wrote:
И логично, и информативно.

Вроде бы просто и логично, но вылезает проблема - значки. Для внутренних команд они берутся из маппинга *.inc, em-команды сами содержат пути к значкам. А где их брать для условных au-команд?

Orion9 wrote:
чтобы Маэстро хотя бы чуток подсобил и сделал отдельный интерфейс для взаимодействия с Autorun

Очень сомневаюсь, что Кристиан будет заниматься таким взаимодействием со сторонними плагинами или приложениями. Мне кажется, тема сторонней автоматизации для него по интересу где-то ближе к концу списка.

И кстати, что именно подразумевается под таким взаимодействием?
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 301

Post (Separately) Posted: Sun Jun 09, 2024 12:45    Post subject: Reply with quote

Loopback wrote:
Вроде бы просто и логично, но вылезает проблема - значки.

Да это не проблема. Можно и без значков обойтись, если на то уж пошло. А если они все-таки будут нужны, то вариант с em_ командой всегда есть в запасе.

Кстати, а если попробовать в параметрах au_ команды в самом mnu перадавать путь к значку, то не получится что-нибудь сделать? Сейчас подобная запись просто игнорируется:
Code:
txt = txt & 'MENUITEM "Настройки...", au_fConfig, %COMMANDER_PATH%\Icons\File.dll,20' & auCRLF

Loopback wrote:
Мне кажется, тема сторонней автоматизации для него по интересу где-то ближе к концу списка.

Боюсь, не только сторонней Laughing
Loopback wrote:
И кстати, что именно подразумевается под таким взаимодействием?

Точно сказать не могу, тут надо более глубокие системные знания иметь, но если речь идет об избавлении от всех костылей и о прямом вызове функций Autorun из самого ТС, то, думаю, предложенный вами вариант au_ команд вполне может подойти. Другими словами, при создании кнопки в качестве команды указывается не cm_ или em_, а au_ команда с именем функции Autorun. Или в ТС должна быть своя команда, которая будет принимать в качестве параметров имя такой функции. А уж как этот интерфейс будет внутренне устроен и реализован - это другой, чисто технический вопрос. Но понятно, что Autorun должен будет каким-то образом предоставлять список всех доступых к вызову функций, объявленных при загрузке плагина. Другой вопрос, что без самого Гислера такие вопросы не решить и никакие интерфейсы не наладить.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1329

Post (Separately) Posted: Mon Jun 10, 2024 00:55    Post subject: Reply with quote

Orion9 wrote:
Можно и без значков обойтись, если на то уж пошло.

Без значков грустно Smile
Orion9 wrote:
Кстати, а если попробовать в параметрах au_ команды в самом mnu перадавать путь к значку

Это один из вариантов, хотя не очень хотелось бы расширять парсер под нестандартный формат. Другой вариант - отдельная функция, задающая привязку au-команды к значку, но это тоже не идеальный вариант, к тому же вызывать ее придется до создания меню. Надо думать дальше. Впрочем, всё равно до следующей беты я это скорее всего не начну.
Orion9 wrote:
Другими словами, при создании кнопки в качестве команды указывается не cm_ или em_, а au_ команда с именем функции Autorun.

Ясно. Но это уже, конечно, из области фантастики. В общем вариант с регистрацией сообщений остаётся основным рабочим вариантом. По-сути единственный его минус - в необходимости дополнительного приложения, отправляющего сообщения.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 301

Post (Separately) Posted: Mon Jun 10, 2024 12:20    Post subject: Reply with quote

Loopback wrote:
Это один из вариантов, хотя не очень хотелось бы расширять парсер под нестандартный формат.

Да, могут быть проблемы, особенно если Гислер вдруг решит обрабатывать строку за запятой, т.е. за командой. Это удивительно, как он до сих пор не сделал что-то вроде:
Code:
MENUITEM "Reboot", cm_Exit, 9

Казалось бы, если есть возможность передавать параметры командам, то логично иметь такую поддержку в MNU файлах. Но даже и такой вариант можно было бы учесть в парсере каким-нибудь дополнительным ключом или маркером.
Loopback wrote:
Другой вариант - отдельная функция, задающая привязку au-команды к значку, но это тоже не идеальный вариант, к тому же вызывать ее придется до создания меню.

С одной стороны, в шапке будут сразу видны объявления и связи всех значков, но с другой стороны, если значков ожидается десятки, то это лишняя груда строк, причем в самом начале скрипта.)
Loopback wrote:
Но это уже, конечно, из области фантастики.

Знаю... Но как красиво было бы! Laughing
Loopback wrote:
В общем вариант с регистрацией сообщений остаётся основным рабочим вариантом. По-сути единственный его минус - в необходимости дополнительного приложения, отправляющего сообщения.

Небольшой минус, согласен. Тем более, что такие утилиты, как TCFS2, не только ведь для отправки сообщений используется, а значит, в любом случае должны быть в наборе.

Более реалистичный случай, если автор ТС сделает собственную команду SendMessage для отправки сообщений окнам, в том числе и своему. Но не похоже, чтобы это было ему интересно. Тема автоматизации там действительно не в приоритетах, судя по всему, а вернее:
 Hidden text
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1329

Post (Separately) Posted: Tue Jun 11, 2024 01:19    Post subject: Reply with quote

Orion9 wrote:
особенно если Гислер вдруг решит обрабатывать строку за запятой

Это уже не будет иметь значения, он раньше споткнётся на неподдерживаемом идентификаторе.
Orion9 wrote:
Казалось бы, если есть возможность передавать параметры командам, то логично иметь такую поддержку в MNU файлах.

Возможно, не хочет ломать десятилетиями надежно работающий код. А может ему просто никто это не предлагал.
Orion9 wrote:
то это лишняя груда строк, причем в самом начале скрипта

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

Еще есть простой вариант: завести какой-нибудь единый ini-файл с соответствиями. Но этот вариант как-то тоже не очень, появляется еще одна точка редактирования.

Orion9 wrote:
Тем более, что такие утилиты, как TCFS2, не только ведь для отправки сообщений используется, а значит, в любом случае должны быть в наборе.

Как вариант, можно попробовать сделать отправку сообщения через запуск rundll32 (которая гарантированно есть в любой винде) и субплагин Autorun-a, например Runtime. Вызов может выглядеть как-нибудь так:

rundll32.exe <Путь к плагину>Autorun_Runtime.dll,SendMessage "MyMessage 0 0".

Но это по-сути всё равно вызов через внешнее приложение.

Но на самом деле тоже не вижу проблемы иметь утилиту в комплекте, тем более столь несущественного размера.

Orion9 wrote:
Более реалистичный случай, если автор ТС сделает собственную команду SendMessage для отправки сообщений окнам, в том числе и своему.

Да, такого варианта вполне хватило бы, что-то типа cm_SendMessage. Несколько параметров внутренние команды поддерживают.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 301

Post (Separately) Posted: Tue Jun 11, 2024 13:13    Post subject: Reply with quote

Loopback wrote:
Возможно, не хочет ломать десятилетиями надежно работающий код. А может ему просто никто это не предлагал.

Может, и есть смыл попросить его рассматривать запятую после команды в MNU как начало параметров или вообще игнорировать все, что идет за запятой (потому что сейчас это приводит к ошибке и недоступности пунктов меню), но я не большой ходок на зарубежный форум челом бить.)
Loopback wrote:
Еще есть простой вариант: завести какой-нибудь единый ini-файл с соответствиями. Но этот вариант как-то тоже не очень, появляется еще одна точка редактирования.

Ни в коем случае! Пусть уж лучше в .aucfg будет куча строк Smile
Loopback wrote:

rundll32.exe <Путь к плагину>Autorun_Runtime.dll,SendMessage "MyMessage 0 0".

Интересная идея. Если есть возможность, то, думаю, такой вызов не помешал бы. Хорошо иметь под рукой разные инструменты.
Loopback wrote:
Да, такого варианта вполне хватило бы, что-то типа cm_SendMessage. Несколько параметров внутренние команды поддерживают.

Сделает - хорошо. Не сделает - проживем.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1329

Post (Separately) Posted: Wed Jun 12, 2024 00:08    Post subject: Reply with quote

Orion9 wrote:
Сделает - хорошо. Не сделает - проживем.

Вряд ли дождёмся, так что сами, всё сами Smile Проблему решил, получилось довольно красиво, полностью используя имеющиеся средства ТС.

Можно будет просто использовать свои числовые номера команд, главное, чтобы они не пересекались с имеющимися номерами cm-команд. Вызывать можно точно так же, как обычные cm-команды, как из панели, так и из меню. И для них можно добавить маппинг значков в WCMICONS.INC, как и для внутренних команд. Формат меню менять не нужно.

Осталось дождаться следующей версии, т.к. решил включить этот функционал в основной плагин. Больше пока ничего не добавляю, пишу справку.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 301

Post (Separately) Posted: Wed Jun 12, 2024 11:40    Post subject: Reply with quote

Loopback wrote:
Вряд ли дождёмся, так что сами, всё сами Smile

Ну как тут не вспомнить золотые слова Зорга:

 Hidden text

Loopback wrote:
Можно будет просто использовать свои числовые номера команд, главное, чтобы они не пересекались с имеющимися номерами cm-команд. Вызывать можно точно так же, как обычные cm-команды, как из панели, так и из меню. И для них можно добавить маппинг значков в WCMICONS.INC, как и для внутренних команд. Формат меню менять не нужно.

Звучит немного загадочно, но похоже, вам действительно удалось найти красивое решение. Хотелось бы увидеть примеры такого использования.)
Loopback wrote:
Осталось дождаться следующей версии, т.к. решил включить этот функционал в основной плагин. Больше пока ничего не добавляю, пишу справку.

Отлично! Рад слышать, что процесс вошёл в заключительную стадию. Новая версия плагина давно уже заждалась. Я тоже сегодня постараюсь доделать скрипт на заголовок. Там файл .aucfg уже 1200 строк пробил, но вроде неплохо получилось.)
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1329

Post (Separately) Posted: Thu Jun 13, 2024 00:01    Post subject: Reply with quote

Orion9 wrote:
Звучит немного загадочно

Никакой мистики. По-сути не сильно отличается от SetMessageAction, но с нюансами. К слову, вариация этой же методики используется в TCFS2Tools.

Сначала в скрипте регистрируем команду c функцией:

Code:

RegisterCommand 60000 MyCommand

Func MyCommand(lParam)
EndFunc


Зарегистрированное число (в данном случае 60000) - выглядит и действует как обычная внутренняя команда TC, только вызывающая функцию Autorun. Соответственно, практически всё, что применимо к внутренней команде TC, применимо и к этой. Правда, вызов из главного меню пришлось делать на костылях, т.к. при вызове из него тотал, оказывается, не отправляет сообщение с командой.

Единственный здесь момент - не пересекаться с имеющимися командами TC. Его внутренние команды условно располагаются в диапазоне от 1 до 9999. Начиная с 10000 идут автогенерируемые номера команд для пунктов меню с em-командами. Сколько их может быть, не используются ли внутренне еще какие-нибудь диапазоны - неизвестно. Поэтому специально ограничил возможность регистрировать числа < 60000, но это условно, если появится дополнительная информация, можно будет скорректировать.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3 ... , 141, 142, 143  Next
Page 142 of 143

 
Jump to:  
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