Autorun

Обсуждение только плагинов и утилит для Total Commander.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig писал(а):Но Autorun не умеет с секциями инишников работать.
Да, этот вопрос недавно поднимался. Может быть, Loopback сделает в будущих версиях. Нужная фича, на мой взгляд.
AkulaBig писал(а): Только не пишите мне про OPENBAR, которые открывают меню в случайном месте экрана.
Это удивительно, как Гислер не сделал, чтобы панель открывалась в нужном месте по этой команде. У меня в свое время такие планы на нее были.)
AkulaBig писал(а):Вот такое можно сделать?
Для современного Autorun это семечки.)

Код: Выделить всё

RegisterCommand 60011 "AutoRestart"

Func AutoRestart(lParam)
   Local bar = %COMMANDER_PATH% & "\Bars\Restart.bar"
   If IsPressed (0x11) Then
      If FileExist(bar) Then
        ShowPopupMenu /D %bar%
      Else   
         ShowHint("Не найден " & bar)
      Endif
      Return
   Endif
   SendCommand(24340, 25)
EndFunc

Код: Выделить всё

TOTALCMD#BAR#DATA
60011

%COMMANDER_EXE%
ЛКМ - Перезапуск от администратора|Ctrl+ЛКМ - Меню перезапуска


60011
Только почитайте про ShowPopupMenu, там есть некоторые нюансы при открытии бар-файлов.
Аватара пользователя
jentoso
Сообщения: 443
Зарегистрирован: Чт дек 20, 2007 01:36

Сообщение jentoso »

Но Autorun не умеет с секциями инишников работать. У меня такая задумка. Чтобы не мусорить, я не держу три файла, а держу один с тремя секциями User и User_lng. В зависимости от
А nircmd, который давно развивается, умеет это делать?
Наверно есть ограничения.
TC 11.58 combo, Windows 11 x64
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а): Для современного Autorun это семечки.)
Спасибо. Закончу со STARTMENU, буду разбираться.

Добавлено спустя 2 минуты:
jentoso писал(а): А nircmd, который давно развивается, умеет это делать?
Наверно есть ограничения.
Если это вопрос ко мне, то не знаю. Я не пользуюсь nircmd.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

jentoso писал(а):А nircmd, который давно развивается, умеет это делать?
Наверно есть ограничения.
Нет, судя по всему, не умеет. Но как я писал прежде, для таких задач хорошо подойдет связка Autorun+AutoIt или Autorun+Autohotkey (или другой скриптовый язык). Тогда возможностей становится значительно больше при небольших затратах.

Пример на Autohotkey:
[cut="WriteIniSect.ahk"]

Код: Выделить всё

#Requires AutoHotkey v2

if A_Args.Length < 3
{
   try FileAppend "Недостаточно параметров", "*", "CP0"
   ExitApp
}

ini := A_Args[1]
sect := A_Args[2]
dest := A_Args[3]

if Not FileExist(ini)
{
   try FileAppend "Файл не найден " ini, "*", "CP0"
   ExitApp
}

try
   pairs := IniRead(ini, sect)
catch
{
   try FileAppend "Ощибка чтения секции " sect, "*", "CP0"
   ExitApp
}

try
   IniWrite pairs, ini, dest
catch
{
   try FileAppend "Ошибка записи секции " dest, "*", "CP0"
   ExitApp
}
[/cut]
Кнопка Autorun может выглядеть так:
[cut]

Код: Выделить всё

RegisterCommand 60012 "IniSectSwitch"

Func IniSectSwitch(lParam)
   Local AHKV2 = %COMMANDER_PATH% & "\Scripts\Ahk\AutoHotKey32.exe"
   Local script = %COMMANDER_PATH% & "\Scripts\Ahk\WriteIniSect.ahk"
   Local ini, sect, dest
   
   ini = %COMMANDER_PATH% & "\Scripts\Ahk\Test.ini"
   sect = "Config_1"
   dest = "Config"
   
   If IsPressed (0x11) Then sect = "Config_2"
   
   If Not FileExist(AHKV2) Then   
      ShowHint("Не найден AutoHotkey " & AHKV2)
      Return          
   Endif
   
   If Not FileExist(script) Then      
      ShowHint("Не найден скрипт " & script        
      Return                    
   Endif

   ProcessExecGetOutput pipe %AHKV2% '"%script%" "%ini%" "%sect%" "%dest%"'
   If Not (pipe = "") Then 
      ShowHint(pipe)
   Else
      ShowHint("Операция выполнена")   
   EndIf   
   
EndFunc
[/cut]
[cut]

Код: Выделить всё

TOTALCMD#BAR#DATA
60012

%COMMANDER_EXE%
Запись в ini


60012
[/cut]
Кнопка меняет в указанном ini-файле секцию [Config] на [Config_1]. При зажатом Ctrl - [Config] на [Config_2]. Путь к файлу и секции можно поменять в скрипте. Если нужен обмен секциями, то операцию нужно повторить в два этапа, например: [Config_2] <- [Config], [Config] <- [Config_1].

В общем это только пример, но уже рабочий. Ножно только все расставить по местам.

Добавлено спустя 3 минуты:
AkulaBig писал(а):Спасибо. Закончу со STARTMENU, буду разбираться.
Loopback, судя по всему, в отлучке, т.ч. помог за него, чем смог :) Правда, теперь и я буду в отлучке какое-то время, т.ч. успехов вам с Autorun!
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):Правда, теперь и я буду в отлучке какое-то время, т.ч. успехов вам с Autorun!
Спасибо. Возвращайтесь поскорей :wink:
Я только-только с запуском TCIMG разобрался. Да еще команда cm_ReloadBarIcons все никак не хотела срабатывать. Оказалось, что без ключей /SW_HIDE /WAIT ShellExec она просто не успевала сработать. Не очень хорошее решение, так как видимо низкая скорость TCIMG здесь имеет значение. Попробую ваш вариант с Autohotkey. Вдруг он быстрее окажется.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):для таких задач хорошо подойдет связка Autorun+AutoIt или Autorun+Autohotkey (или другой скриптовый язык). Тогда возможностей становится значительно больше при небольших затратах.
Отлично работает. И намного быстрей, чем TCIMG. Спасибо.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig писал(а):Спасибо. Возвращайтесь поскорей
Да куда ж я денусь? Autorun это теперь надолго, можно сказать на всю жизнь :lol: Сейчас просто дела некоторые надо решить, но может к выходу Total Commander 11.50 Final успею. Хотолесь бы уже обновиться и доделать, что не доделал в том году (утилитки там разные, оптимизации файлов и т.д.). Например, тот же AkelPad нужно обновить и ряд прочих утилит и плагинов.

Но вы и самостоятельно разберетесь, сомнений нет, это только вопрос времени, как я говорил. Главное, чтобы никакой "срочный" результат не давил и не мешал нормальному изучению. Тут надо на расслабоне подойти, как я в свое время: каждое утро кофе, кокосовое молоко и справка Autorun :mrgreen: Шучу.) Второе необязательно, первое и третье - да.))

Когда хочется быстрого результата, то и результата нет и стресса нагнетаешь. Две-три недели спокойного изучения (без постановки каких-либо целей) гораздо эффективнее. Тем более что справка у Autorun просто огонь, очень профессиональная и хорошо оформленная. Читается легко и непринужденно. Если и есть какой-то небольшой недостаток - это скромное количество примеров и негласное требование знания основ программирования, без которого с Autorun будет непросто разобраться. Что мне нравилось в TCIMG - это большое количество примеров, просто умопомрачительные 16,500 примеров :lol: Но примеры облегчают и ускоряют понимание, т.ч. можно сказать, лишними они не бывают. В последней справке Autorun появилась библиотека примеров, пусть пока и небольшая, но надеюсь она будет только расти!
AkulaBig писал(а):И намного быстрей, чем TCIMG.

Да, скорость Autorun и TCFS2 - это то, что меня больше всего сначала привлекло. Но как оказалось, эти утилиты в совместном использовании могут покрыть значительное число функциональных решений, для достижения которых раньше использовался TCIMG. А освоение отдельных скриптовых языков (AutoIt, Autorun, VBS) и вовсе может развязать руки. Связка Autorun+"скриптовый язык" позволит сделать практически все!
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а): Что мне нравилось в TCIMG - это большое количество примеров, просто умопомрачительные 16,500 примеров :lol:
Это очень помогает. А вообще TCIMG - это-же тот-же AutoIt скрипт. Просто очень большой. Поэтому относительно медленный. Так что не сказать, что вариант с TCIMG и ahk прям кардинально отличаются по скорости. Все равно сразу в меню Запуск не зайдешь. На ту-же секундочку задержка есть. Тут даже не в этом дело. Просто я любитель минимализма. Зачем использовать в сборке два одинаковых инструмента. А так как Autorun маст хэв, дак здорово-же будет, если на нем удастся написать все необходимое.

Добавлено спустя 1 час 53 минуты:
Orion9 писал(а): Для современного Autorun это семечки.)
Установил этот скрипт. Как человек воспитанный, скажу восхитительно. Хотя в голову пришло совсем другое слово, намного короче. Скорость работы по сравнению с TCIMG просто космическая. Сейчас еще разберусь с настройками ShowPopupMenu.
Loopback
Можно-ли вас попросить реализовать функцию копирования секции ини-файла? Как-раз скорость ее работы для меня очень критична. А реализация через ahk достаточно медленная.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

В конце-концов пришлось использовать этот скрипт через au3, так как мне обязательно надо было использовать пользовательскую команду в кнопке. Скорость от этого не уменьшилась. Но внешний вид менюшки очень не нравится. Он совершенно не соответствует стандартному меню ТС. Совершенно другие цвета. В MENUIMG я хотя-бы цвета настроил более-менее, а тут нельзя.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig писал(а):На ту-же секундочку задержка есть.
Да, жаль. И от этого никуда не деться, к сожалению. Хотя мне тоже хотелось бы более быстрой реакции при внешнем вызове.
AkulaBig писал(а):Тут даже не в этом дело. Просто я любитель минимализма.

Раз вы делаете публичную сборку, это безусловно важно, на мой взгляд. Вот если будет 1-2 кнопки на TCIMG, тогда и можно будет включить эту утилиту в дистрибутив.
AkulaBig писал(а):Установил этот скрипт. Как человек воспитанный, скажу восхитительно. Хотя в голову пришло совсем другое слово, намного короче.

:lol:

А ведь помимо скорости, Autorun дает и некоторую интеграцию в процесс ТС, что позволяет, например, менять переменные окружения. Это тоже открывавет дополнительные возможности, которых нельзя достичь внешними утилитами.
AkulaBig писал(а):Loopback
Можно-ли вас попросить реализовать функцию копирования секции ини-файла?

+1

Плюслую для повышения приоритета, на случай если фича будет реализовываться в новых версиях. Идея с заменами секций действительно стоящая, имхо.
AkulaBig писал(а):Как-раз скорость ее работы для меня очень критична. А реализация через ahk достаточно медленная.

Ну, тут только два варианта пока есть:

1) добавить к ahk-скрипту третий параметр, чтобы он делал смену секций за один проход (это увеличит скорость почти в 2 раза).
2) использовать vbs-скрипт для перезаписи секций, что еще больше должно увеличить скорость.

Что касается vbs-скрипта, то если нужно, чтобы он возвращал в Autorun через stdout какую-то информацию,его тоже можно вызвать функцией ProcessExecGetOutput, например:

Код: Выделить всё

ProcessExecGetOutput up "cscript.exe" "/nologo script.vbs" %ScriptPath%
AkulaBig писал(а):Но внешний вид менюшки очень не нравится. Он совершенно не соответствует стандартному меню ТС.

Почему? По-моему, все как раз стандартно, и в темном режиме тоже. Только не говорите, что вы на ХРюше сидите :lol:
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а): 1) добавить к ahk-скрипту третий параметр, чтобы он делал смену секций за один проход (это увеличит скорость почти в 2 раза).
2) использовать vbs-скрипт для перезаписи секций, что еще больше должно увеличить скорость.
Надо попробовать.
Orion9 писал(а):
Почему? По-моему, все как раз стандартно
Ни один цвет не совпадает. Цвет фона другой. Цвет выделения другой. Нашел, откуда это цвета. Избранные каталоги.

Добавлено спустя 2 часа 32 минуты:
Orion9 писал(а): Ну, тут только два варианта пока есть:
Переписал скрипт на au3. Он умеет секции читать. Вроде чуть быстрей стало.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig писал(а):Нашел, откуда это цвета. Избранные каталоги.
Не сталкивался с таким. Но это меню действительно больше похоже на меню Autorun, чем стандартное меню ТС при вызове бар-файла "в виде меню". Если дело в каких-то настройках, то может кто-то другой подскажет. А в чистом ТС то же самое?
AkulaBig писал(а):Переписал скрипт на au3. Он умеет секции читать. Вроде чуть быстрей стало.
Я примерно так и думал.) Ну все, теперь вы все поняли: связка Autorun+AutoIt позволит вам делать все, что хочешь, хоть собственное меню вызывать :lol:

Можете, кстати, на крайний случай MENUIMG прямо из Autorun попробовать вызвать, наверняка быстрее будет, чем через TCIMG.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):
AkulaBig писал(а):Нашел, откуда это цвета. Избранные каталоги.
Не сталкивался с таким.
Что значит не сталкивался? Никогда не нажимали на звездочку с правой стороны панели ТС? Избранные каталоги или Directory hotlist. Стандартная функция ТС. Рядом еще треугольник История каталогов или History.
Orion9 писал(а): связка Autorun+AutoIt позволит вам делать все, что хочешь
Закрадываются у меня сомнения, что встроенная обработка секций инишника тоже будет не быстрой. Ведь меню через au3 работает очень быстро, а работа с секциями занимает какое-то время. Но будем надеяться на хорошее.
Orion9 писал(а): Можете, кстати, на крайний случай MENUIMG прямо из Autorun попробовать вызвать, наверняка быстрее будет, чем через TCIMG.
Тут все упирается в то, что мне в кнопке обязательно нужно использовать пользовательскую команду. То-есть опять придется использовать au3 для запуска кнопки. Но эксперимент проведу. Это интересно.
Вот что я накопал в ТС:
Изображение
Если пользовательскую команду записывать вот в таком виде, то у кнопки появляется стрелка. Это означает, что у кнопки есть меню. Добиться такого при прописке MENUIMG.exe или другой прожки не удастся. Стрелки не будет.
Изображение
А вот внутренности этой кнопки. Название пользовательской команды с окончанием .bar и прописывание параметра (%Z использует MENUIMG, но можно любой) заставляет кнопку показывать стрелку.
Вот поэтому меня совершенно не устраивает числовое название команды в Autorun.

Добавлено спустя 17 минут:

Кстати, в справке к команде RegisterCommand написано:
...Также вызов возможен с помощью отправки окну Total Commander сообщения WM_USER + 51 с wParam, равным номеру команды...
Я правильно понимаю, что это для программистов? Стандартными средствами ТС я этот вызов в пользовательской команде принять не смогу?
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а): Можете, кстати, на крайний случай MENUIMG прямо из Autorun попробовать вызвать, наверняка быстрее будет, чем через TCIMG.
Сделал так. Скорость стала бешенной. Еще одну кнопку избавил от TCIMG. Осталась одна серьезная кнопка на TCIMG.
Блин, я-же буквально на днях наделал кнопок для создания директорий, файлов, переименования. И все они на TCIMG. И там куча диалоговых окон. Так что никуда от нее не деться. Вроде другого инструмента я для этого не встречал.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig писал(а):Что значит не сталкивался? Никогда не нажимали на звездочку с правой стороны панели ТС?
Нажимал, конечно :lol: Не сталкивался - чтобы стили меню отличались. Но если у вас есть такая проблема, надо разобраться в чем причина, если, конечно, оно вам еще нужно, после успешного прикручивания MENUIMG.
AkulaBig писал(а):Закрадываются у меня сомнения, что встроенная обработка секций инишника тоже будет не быстрой. Ведь меню через au3 работает очень быстро, а работа с секциями занимает какое-то время.
Попробуйте на vbs реализовать. У меня сейчас нет возможности проверить, но там вроде ничего сложного. Вот пример смены секций из сборки PowerUser, можете взять за основу и переделать под себя:
[cut]

Код: Выделить всё

Dim WSH  
  Set WSH = CreateObject("WScript.Shell")  

  Str1 = "[+Associations]"  
  Str2 = "[-Associations]"  
  INI = WSH.ExpandEnvironmentStrings("%COMMANDER_PATH%\install\User\Associations.ini")  
  Text = CreateObject("Scripting.FileSystemObject").OpenTextFile(INI, 1, False, -1).ReadAll  

  If InStr(1, Text, Str1, 1) > 0 Then  
  Text = Replace(Text, Str1, Str2, 1, 1, 1)  
  Else  
  Text = Replace(Text, Str2, Str1, 1, 1, 1)  
  End If  
  With CreateObject("Scripting.FileSystemObject")  
  .OpenTextFile(INI, 2, False, -1).Write Text  
  .OpenTextFile(INI, 1, False, -1).Close  
  End With
  
  Str1 = "[Associations]"  
  Str2 = "[-Associations]"  
  INI = WSH.ExpandEnvironmentStrings("%COMMANDER_PATH%\install\User\Associations.ini")  
  Text = CreateObject("Scripting.FileSystemObject").OpenTextFile(INI, 1, False, -1).ReadAll  

  If InStr(1, Text, Str1, 1) > 0 Then  
  Text = Replace(Text, Str1, Str2, 1, 1, 1)  
  Else  
  Text = Replace(Text, Str2, Str1, 1, 1, 1)  
  End If  
  With CreateObject("Scripting.FileSystemObject")  
  .OpenTextFile(INI, 2, False, -1).Write Text  
  .OpenTextFile(INI, 1, False, -1).Close  
  End With
  
  Str1 = "[Associations]"  
  Str2 = "[+Associations]"  
  INI = WSH.ExpandEnvironmentStrings("%COMMANDER_PATH%\install\User\Associations.ini")  
  Text = CreateObject("Scripting.FileSystemObject").OpenTextFile(INI, 1, False, -1).ReadAll  

  If InStr(1, Text, Str1, 1) > 0 Then  
  Text = Replace(Text, Str1, Str2, 1, 1, 1)  
  Else  
  Text = Replace(Text, Str2, Str1, 1, 1, 1)  
  End If  
  With CreateObject("Scripting.FileSystemObject")  
  .OpenTextFile(INI, 2, False, -1).Write Text  
  .OpenTextFile(INI, 1, False, -1).Close  
  End With

  Str1 = "%I%,54"  
  Str2 = "%I%,55"  
  INI = WSH.ExpandEnvironmentStrings("%COMMANDER_PATH%\install\Bars\tc.bar")  
  Text = CreateObject("Scripting.FileSystemObject").OpenTextFile(INI, 1, False, -1).ReadAll  

  If InStr(1, Text, Str1, 1) > 0 Then  
  Text = Replace(Text, Str1, Str2, 1, 1, 1)  
  Else  
  Text = Replace(Text, Str2, Str1, 1, 1, 1)  
  End If  
  With CreateObject("Scripting.FileSystemObject")  
  .OpenTextFile(INI, 2, False, -1).Write Text  
  .OpenTextFile(INI, 1, False, -1).Close  
  End With
  
  Str1 = "%I%,54"  
  Str2 = "%I%,55"  
  INI = WSH.ExpandEnvironmentStrings("%COMMANDER_PATH%\install\Bars\vertical3.bar")  
  Text = CreateObject("Scripting.FileSystemObject").OpenTextFile(INI, 1, False, -1).ReadAll  

  If InStr(1, Text, Str1, 1) > 0 Then  
  Text = Replace(Text, Str1, Str2, 1, 1, 1)  
  Else  
  Text = Replace(Text, Str2, Str1, 1, 1, 1)  
  End If  
  With CreateObject("Scripting.FileSystemObject")  
  .OpenTextFile(INI, 2, False, -1).Write Text  
  .OpenTextFile(INI, 1, False, -1).Close  
  End With
  
  WSH.Exec("Programm\TCFS2\TCFS2.exe /ef tcm(519)") 
  WScript.Sleep 50 
  WSH.SendKeys "~"
  REM WSH.Exec("Programm\TCFS2\TCFS2.exe /ef tem(em_bar1_)") 

 
 Set WSH = Nothing 
 WScript.Quit
[/cut]
А вообще, на мой взгляд, тут и не нужна большая скорость. Вряд ли пользователь после смены языка сразу побежит в меню запуска делать там что-то.) Наоборот можно увеличить задержку в потоке на пару-тройку секунд и сократить, тем самым, количество обращений к ini.
AkulaBig писал(а):Если пользовательскую команду записывать вот в таком виде, то у кнопки появляется стрелка.
Не знал о таком. А это будет работать при отключении оверлея в панелях опцией PopupOverlay=0? Просто у меня как раз оверлей полностью отключен в wincmd.ini.
AkulaBig писал(а):Я правильно понимаю, что это для программистов? Стандартными средствами ТС я этот вызов в пользовательской команде принять не смогу?
Да вроде работает, если сделать все то же самое, но через em_:

Код: Выделить всё

[em_my_command]
cmd=60011
param=
AkulaBig писал(а):Осталась одна серьезная кнопка на TCIMG.
На Autorun, конечно, можно сделать многое, но ограничения все-таки есть.) Приведите код кнопки на TCIMG или напишите в двух словах, что нужно сделать, если будут какие-то мысли по этому поводу, то обязательно поделюсь. Но вы сами можете на au3 все реализовать, включая диалоговые окна, на крайний случай.
Ответить