Autorun

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

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

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

Сообщение Orion9 »

AkulaBig писал(а):Вот и хочется проверить, стоит-ли игра свеч.
Думаю, стоит. Особенно если что-то еще полезное потом добавить, чтобы поток не только за сменой языка следил. Хотя правильнее и интереснее, наверное, было бы, если бы К.Гислер сделал что-то наподобие секции Events в wincmd.ini для запуска em_ команд в ответ на те или иные события. Например:

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

[Events]
LangChange=em_usercmd1, em_usercmd2
И другие события.

Кажется, в вашей сборке была коллекция иконок:

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

Alesy
Fenix
Flat
Fugue
Image
Impomezia
PE
Titan
Universal
VIM
X-Qute
Сaramel
Спасибо, что собрали все в одно место. В том году я так и не успел с ними разобраться, а сейчас сделал для этого одну удобную функцию, т.е. для быстрой визуальной оценки иконок на панели. Может, кому-то тоже пригодится:
[cut]

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

Func IconsPanel(Silent = 0)

    Local sPath, sName, sFile, hint, icons
    
    sPath = RequestCopyDataInfo("SP")
    sName = RequestCopyDataInfo("SN")
    sFile = sPath & sName
    
    If Not FileExist(sFile) Then 
       ShowHint("Файл не существует " & sFile)
       Return 
    Endif
    
    If StrPos(FileGetAttr(sFile), "D") Then
       ShowHint("Каталог")
       Return 
    Endif
   
   obj = Plugin("IconLibrary")
   If ERROR = 0 then
      obj.FileName = sFile
      icons = obj.GetValue(0)
      If icons > 0 then
         hint = "Иконок: " & icons
         CreateIconsBar(sFile, icons)
      Else
         hint = "Нет иконок"
      Endif
      hint &=  & auCRLF & "Файл " & sFile
      Free(obj)
   Else
      hint = "Plugin Error " & ERROR
   Endif
      
   If icons = 0 Then ShowHint(hint)
EndFunc

Func CreateIconsBar(FileName, Icons)

   ShowDebugHint("Loading Icons...", 0)
   
   Local bar = %COMMANDER_PATH% & "\Bars\Auto_icons.bar"
   Local br2 = %COMMANDER_PATH% & "\Bars\Auto_icons.br2"   
   
   ShellExec /SW_HIDE /WAIT:2000 %COMSPEC% "/c del /f /q ""%bar%"""   
   ShellExec /SW_HIDE /WAIT:2000 %COMSPEC% "/c del /f /q ""%br2%"""
   
   If FileExist(bar) Then   
      ShowDebugHint("Ошибка удаления " & bar, 0)
      Return
   Endif   
   
   IniWrite %bar% "Buttonbar" "Buttoncount"  "0"
   If ERROR = 1 Then 
      ShowDebugHint("Ошибка создания " & bar, 0)
      Return 
   EndIf
   
   IniRead /R def %COMMANDER_INI% "Buttonbar" "Buttonbar" "%COMMANDER_PATH%\DEFAULT.BAR"   
   
   IniWrite %bar% "Buttonbar" "Button1" "Wcmicons.dll,15"
   IniWrite %bar% "Buttonbar" "Cmd1" %def%
   IniWrite %bar% "Buttonbar" "Menu1" "Вернуться"   

   For i = 2 to Icons+1
      IniWrite %bar% "Buttonbar" %"'Cmd'  & %i%" "100000"
      IniWrite %bar% "Buttonbar" %"'Menu' & %i%"   %"%i%-2"
      IniWrite %bar% "Buttonbar" %"'Button' & %i%" %"%FileName% & ','& %i%-2"      
   Next
   
   IniWrite %bar% "Buttonbar" "Buttoncount"  %"%Icons%+1"
   WinSetState(23)
   
   ShowDebugHint("Menu." & auCRLF & i-1 & " items created.", 0)
      
   CommandExec("em_open_icons_panel")

EndFunc

Func ShowDebugHint(DebugHint, HintSleep = 1000)

   SetHintParam("ShowHint", "Font", 10, "Arial")
   SetHintParam("ShowHint", "BackColor", 0x001C1C1C)
   SetHintParam("ShowHint", "Text", 0xFFFFFF)   
  
   ShowHint(DebugHint)
   
   If HintSleep > 0 Then 
      Sleep(HintSleep)
      WinSetState(23)
   Else
      Sleep(100)   
   Endif   
   SetHintParam("ShowHint", "Reload")
   
EndFunc
[/cut]
[cut="Кнопка"]TOTALCMD#BAR#DATA
60006

%COMMANDER_EXE%
Загрузить иконки на панель


60006
[/cut]
Потребуется плагин IconLibrary:
http://wincmd.ru/plugring/iconlibrary.html

Кнопка создает панель из иконок файла под курсором и загружает ее на главную панель инструментов. Файл панели %COMMANDER_PATH%\Bars\Auto_icons.bar. В usercmd.ini нужно добавить команду em_open_icons_panel:

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

[em_open_icons_panel]
cmd=OPENBAR1
param=%|COMMANDER_PATH|\Bars\Auto_icons.bar
Можно повесить функцию на клавишу или клик мыши соответствующими функциями SetHotkeyAction и ControlSetMouseAction.

В общем, получилось удобно. Мне понравилось. Эх... нахватаю теперь себе иконок! :lol:
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):
Ну вот, начало положено. Функция отлично работает. Теперь надо наполнять данными.

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

RunThread ThreadWatchLang

Func ThreadWatchLang
	While 1
		If AUTORUN_TCLANG = 'eng' Then
			IniWrite %COMMANDER_INI% "User" "RedirectSection" "%COMMANDER_PATH%\RedirectSection\User_ENG.ini"
		Else
			IniWrite %COMMANDER_INI% "User" "RedirectSection" "%COMMANDER_PATH%\RedirectSection\User_RUS.ini"
		EndIf
		Sleep(1000) 
	Wend
EndFunc
Добавлено спустя 20 минут:

Оказывается возник косячок синтаксиса. Как правильно прописать %COMMANDER_PATH%\RedirectSection\User_ENG.ini в значение ключа инишника?
В таком виде происходит подстановка переменной %COMMANDER_PATH%, а мне надо, чтобы это было значением параметра. Двойные %% не помогли.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

Ну вот, начало положено. Функция отлично работает. Теперь надо наполнять данными.
Ну я же говорил: СЕМЕЧКИ :lol:

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

If AUTORUN_TCLANG = 'eng' Then
Ох, мать Тереза... Как я макрос AUTORUN_TCLANG пропустил? :lol:

[cut]Нет, все-таки плохо... ПЛОХО я читал справку :lol:[/cut]
Как правильно прописать %COMMANDER_PATH%\RedirectSection\User_ENG.ini в значение ключа инишника?
Вы имеете в виду с ключом /EV- попробовать?

P.S. В последнем примере с иконками я забыл в начале команду RegisterCommand 60006 "IconsPanel" добавить. Просто она была в заголовке отдельно с другими такими командами, упустил.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а): Ну я же говорил: СЕМЕЧКИ :lol:
Конечно знания, что в панель статуса ТС не выводятся сведения о языке и отсутствует класс TMyPanel сэкономило много времени. Но главным был алгоритм использования другого потока, а его я не знал.
Orion9 писал(а): Нет, все-таки плохо... ПЛОХО я читал справку :lol:
Свой-то код не помнишь, зачем написал. Я просто целенаправленно искал что-то связанное с языком и нашел описание этой переменной.
Orion9 писал(а): Вы имеете в виду с ключом /EV- попробовать?
Именно оно. Меня смутило описание, что после нее в тексте перестают работать переменные. Думал, что вообще в команде не будут работать. А оказалось не работают только в значении. Лучше-бы автору прямо так и написать. Оригинал:
/EV- Отключает использование переменных и переменных окружения в тексте.
Предлагается:
/EV- Отключает использование переменных и переменных окружения в тексте значения.
Ведь есть четкое описание:
value Значение, которое будет записано для заданного ключа ini-файла.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig
Там всё простым для вас будет. Сложности могут возникнуть, разве что, с какой-то спецификой самого ТС и функционалом ориентированным исключительно на него, поскольку плагин очень тесно с ним связан и вобрал в себя просто огромный пласт знаний и опыта за 15 лет своего существования. Мне больше недели понадобилось только чтобы справку почитать :lol: И это при том, что в начале года я еще 2-3 месяца ее изучал "от корки до корки".)) Объем знаний о внутреннем устройстве ТС, охваченный в справке, конечно, поражает. Полагаю, что не только автор к этому приложил руку, но и другие участники, тот же Flasher. Жаль, что у них с Админом возникли какие-то непримиримые терки, его вклад в общении на форуме не был бы лишним (не всё же иностранцам помогать у Гислера на .ch-сайте)

Всё изучить, конечно, займет какое-то время, но если будете регулярно пользоваться Autorun, то можно посоветовать еще хайлайтер от yozhic для удобной работы со скриптами:
viewtopic.php?p=137473#137473
Конечно знания, что в панель статуса ТС не выводятся сведения о языке и отсутствует класс TMyPanel сэкономило много времени.
Вообще, надо спросить у Loopback, как реализован макрос AUTORUN_TCLANG. Если для его значения считывается ключ LanguageIni из wincmd.ini, то здесь еще подумать надо. Я со строкой состояния изначально заморочился, потому что подумал, что считывать ключ из INI файла каждую секунду как-то комильфо, и что надо что-то другое из ОЗУ проверять. Строка состояния показалась неплохим вариантом, но она имеет недостаток: если на панеле находятся результаты поиска, то слово "файл" в качестве маркера языка уже не прокатывает. Вероятно, есть и другие неучтенные моменты, поэтому правильнее было бы найти что-то другое, более статичное, например, названия функциональных кнопок внизу, но с ними возникла проблема - их названия не выводятся в сведениях об элементах окна. Почему, сложно сказать. С подобными проблемами надо к более знающим людям обращаться, например, к тому же Loopback.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а): Вообще, надо спросить у Loopback, как реализован макрос AUTORUN_TCLANG.
Ну если он меняет значение в рантайме, значит либо таймер, либо CALLBACK. Другог-то не дано.
Orion9 писал(а): правильнее было бы найти что-то другое
Зачем, когда есть готовое отличное решение. Все равно без цикла никак.
Orion9 писал(а): Почему, сложно сказать.
У Гислера много затычек. Я с ним переписывался по поводу некоторых. Он отвечает, что ничего сделать не может.
У меня сейчас новая проблема. Сижу справку читаю. Оказывается вышеприведенный код не срабатывает со STARTMENU. Значение-то я прописал, но оно не перечитывается из инишника ТС. Так что при изменении языка STARTMENU не меняет язык до перезагрузки. Сейчас разбираюсь, можно-ли в Autorun перечитать главное меню.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig писал(а):Ну если он меняет значение в рантайме, значит либо таймер, либо CALLBACK. Другог-то не дано.
Я имел в виду, что если макрос AUTORUN_TCLANG вычисляет свое значение путем чтения соответствующего ключа из ini-файла, то это может привести к проблемам. Во-первых, строчка:

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

If AUTORUN_TCLANG = 'eng' Then 
Будет равносильна простому чтению из wincmd.ini:

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

IniRead /R lng %COMMANDER_INI% "Configuration" "LanguageIni"
С последующей обработкой переменной lng, в которой хранится значение текущего языкового файла "WCMD_RUS.LNG", и из которой нужно будет вычленить код языка (в данном случае "RUS").

Если оставить за скобками ежесекундное чтение ini-файла (современным дискам, которые фактически сами уже как модули оперативной памяти, это, в принице, по барабану), остается другая проблема: что будет, если запустить два ТС и в одном из них поменять язык на английский?

А ничего хорошего не будет. В первой копии, где не было смены языка, поток посчитает, что она произошла, и выполнит соответствующую команду, т.к. обе копии читают один ini-файл.

Кроме того, как выяснилось, в ТС есть серьезная проблема при смене языка, когда запущено два процесса. В русской версии (первой копии) пункты меню перестают работать и значки приходят в полный беспорядок через какое-то время, потому что, опять же, два ТС читают одно значение ключа LanguageIni. Вероятно, это известная проблема, просто я с таким не сталкивался. Но на фоне этой проблемы даже чтение ini-файла макросом AUTORUN_TCLANG кажется пустячком.
AkulaBig писал(а):Оказывается вышеприведенный код не срабатывает со STARTMENU. Значение-то я прописал, но оно не перечитывается из инишника ТС.
С такой же проблемой я столкнулся при смены темы (цветовой схемы), там тоже редирект не перечитывался. Пришлось выходить из ситуации переименованием файлов. Но может быть вам поможет команда cm_ReloadBarIcons? И если вы в переписке с Гислером, то может лучше попросить его сделать перечитывание секции [user] при смене языка?
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а): Если оставить за скобками ежесекундное чтение ini-файла
Не понимаю, почему это вас так пугает. Любая рантайм функция на этом построена.
Orion9 писал(а): что будет, если запустить два ТС и в одном из них поменять язык на английский?
Получилась полная ж... даже без Autorun. В русской копии стала англоязычная ПИ :( А после закрытия ТС и нового запуска происходит запуск англоязычной версии. Это полнейшая жесть. Можно запретить запуск второй копии. Но это так себе решение. Получается надо ковырять в сторону запуска каждой копии со своим инишником. Скорей всего из этого ничего не получится.
Orion9 писал(а): С такой же проблемой я столкнулся при смены темы (цветовой схемы), там тоже редирект не перечитывался. Пришлось выходить из ситуации переименованием файлов.
Что за переименование? Можно поподробней.
Orion9 писал(а): Но может быть вам поможет команда cm_ReloadBarIcons?
С меню она помочь в принципе не может.
Orion9 писал(а): И если вы в переписке с Гислером, то может лучше попросить его сделать перечитывание секции [user] при смене языка?
На него где сядешь, там и слезешь. Спрашивал я его насчет стартменю и быстрых каталогов. Как менять в них язык. Был очень далеко послан.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig писал(а):Не понимаю, почему это вас так пугает. Любая рантайм функция на этом построена.
Просто хотелось бы максимально все оптимизировать и свести к минимуму обращения к файловой системе без лишней необходимости. Но вы правы, можно и так.
AkulaBig писал(а):Скорей всего из этого ничего не получится.
Да не расстраивайтесь, придумаете что-нибудь. Ну, а если не придумаете, то с большой долей вероятности можно сказать, что вряд ли кто-то вообще будет так запускать.) Я, например, очень редко второй ТС запускаю, только если он действительно нужен.
AkulaBig писал(а):Что за переименование? Можно поподробней.
Да было дело, вот здесь я об этом писал. Но там была циклическая смена файлов, а вашем случае (я тут немного подумал) можно сделать еще проще - простым копированием, поскольку файлы заранее известны.
[cut="autorun.cfg"]

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

RegisterCommand 60009 "ChangeLangRU"
RegisterCommand 60010 "ChangeLangEN"

Func ChangeLangRU(lParam)
   Local ru = %COMMANDER_PATH% & "\Ini\Start_RUS.ini"
   Local tc = %COMMANDER_PATH% & "\Ini\Start.ini"    
   ShellExec /SW_HIDE /WAIT:2000 %COMSPEC% '/c copy /y /v "%ru%" "%tc%"'  
   CommandExec("em_change_lang_ru")
EndFunc

Func ChangeLangEN(lParam)
   Local en = %COMMANDER_PATH% & "\Ini\Start_ENG.ini"
   Local tc = %COMMANDER_PATH% & "\Ini\Start.ini"    
   ShellExec /SW_HIDE /WAIT:2000 %COMSPEC% '/c copy /y /v "%en%" "%tc%"'  
   CommandExec("em_change_lang_en")
EndFunc
[/cut]
[cut="Кнопка"]

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

TOTALCMD#BAR#DATA
60009

%COMMANDER_EXE%
Русский


60009
[/cut]
[cut="Кнопка"]

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

TOTALCMD#BAR#DATA
60010

%COMMANDER_EXE%
English


60010
[/cut]
[cut="usercmd.ini"]

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

[em_change_lang_ru]
cmd=OPENLANGUAGEFILE
param=WCMD_RUS.LNG

[em_change_lang_en]
cmd=OPENLANGUAGEFILE
param=
[/cut]
Работает :) Выходит, проблема не в том, что ТС секцию [user] не считывает, а в том, что редирект этой секции не перечитывает.
AkulaBig писал(а):С меню она помочь в принципе не может.
Да, здесь я, конечно, сглупил.) Повелся на то, что cm_ReloadBarIcons не только значки панелей перечитывает, но и значки меню.
AkulaBig писал(а):На него где сядешь, там и слезешь. Спрашивал я его насчет стартменю и быстрых каталогов. Как менять в них язык. Был очень далеко послан.
))))
[cut]Ну вот. А я только хотел к нему в пенпалы набиться :mrgreen:[/cut]
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):Просто хотелось бы максимально все оптимизировать и свести к минимуму обращения к файловой системе без лишней необходимости.
Похоже придется отказаться от этой идеи. Вчера кажется получил от этого затык. Все-же цикл и таймер не одно и тоже.
Orion9 писал(а): вряд ли кто-то вообще будет так запускать.
При этом переключая язык :D
Orion9 писал(а): а вашем случае (я тут немного подумал) можно сделать еще проще - простым копированием, поскольку файлы заранее известны.
Я вчера еще подумал, что можно само содержимое файлов менять. В общем направление понятно. Спасибо за разъяснение.
Orion9 писал(а): Ну вот. А я только хотел к нему в пенпалы набиться :mrgreen:
Я удивлен, что он в этот раз три моих замечания снял. Причем я просто спрашивал, как сделать кое-какие вещи. А вот очень важное замечание по 7z не стал воплощать. Сказал, что так лучше, как сделал он. Хотя это очень неудобно :)
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Похоже ТС обращается к wincmd.ini только при запуске и выгрузке. Замена файлов, замена секций. Никакого результата не приносят. Только если выбрать редактирование меню Запуск происходит обновление данных.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig писал(а):Похоже придется отказаться от этой идеи. Вчера кажется получил от этого затык.
Не замечал проблемы с потоками. Почти год пользуюсь - все исправно работает в фоне. А что именно произошло?
AkulaBig писал(а):Я вчера еще подумал, что можно само содержимое файлов менять.
И все-таки я поторопился, как это часто бывает с "ночными апдейтами".) Простота и немногострочность решения ввела в заблуждение, но без переименования файлов вам, видимо, не обойтись. Копирование приведет к тому, что пользователь потеряет пункты меню, если он их будет добавлять, а именно это и подразумевается при работе с меню "Запуск".

Переименование, конечно, реализуется несколько сложнее, но для вас это не станет проблемой.
AkulaBig писал(а):в этот раз три моих замечания снял
Респондент небезнадежен? Это радует ))
AkulaBig писал(а):Похоже ТС обращается к wincmd.ini только при запуске и выгрузке. Замена файлов, замена секций. Никакого результата не приносят.
Как я понял, он ридерект только один раз считывает, а потом работает с перенаправленным файлом как надо, т.е. перечитывает его, когда требуется.
AkulaBig писал(а):Только если выбрать редактирование меню Запуск происходит обновление данных.
Почему? Мои вчерашние кнопки работают и без этого. Только надо копирование файлов на переименование заменить.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а): Не замечал проблемы с потоками. Почти год пользуюсь - все исправно работает в фоне. А что именно произошло?
Не закрылось окно выбора языка при нажатии на кнопку ОК. Давил, давил, так и не закрылось. Копаться не стал, так как на данном этапе это не принципиально.
Orion9 писал(а):Как я понял, он ридерект только один раз считывает, а потом работает с перенаправленным файлом как надо, т.е. перечитывает его, когда требуется.
Ничего не перечитывается. Хоть через редирект, хоть непосредственно из wincmd.ini. Ни копирование файлов, не замена в них секции, ни замена секции в wincmd.ini не работает. Перечитывает данные ТС только если запустить редактор меню Запуск.
Orion9 писал(а):Мои вчерашние кнопки работают и без этого.
С кнопками я и без Autorun сделаю. Да, с перезагрузкой. Но если есть кнопка, лучше перезагрузиться, чем терзать цикл. Мне без кнопок хотелось, но уже понятно, что это нереально.
Хоть уже не очень важно, но интересно. Не подскажите, почему TCIMG не сработала:

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

RunThread ThreadWatchLang
Func ThreadWatchLang
	While 1
		Switch AUTORUN_TCLANG
			Case 'eng'
				ShellExec %COMMANDER_PATH%\Utilities\TCIMG\TCIMG.exe inirs=%%COMMANDER_PATH%%\RedirectSection\User.ini||User||%%COMMANDER_PATH%%\RedirectSection\User_eng.ini||User
				# %COMMANDER_PATH%\Utilities\TCIMG\TCIMG.exe inirs=%%COMMANDER_PATH%%\RedirectSection\User.ini||User||%%COMMANDER_PATH%%\RedirectSection\User.ini||User_eng
			Case 'rus'
				ShellExec %COMMANDER_PATH%\Utilities\TCIMG\TCIMG.exe inirs=%%COMMANDER_PATH%%\RedirectSection\User.ini||User||%%COMMANDER_PATH%%\RedirectSection\User_rus.ini||User
				# %COMMANDER_PATH%\Utilities\TCIMG\TCIMG.exe inirs=%%COMMANDER_PATH%%\RedirectSection\User.ini||User||%%COMMANDER_PATH%%\RedirectSection\User.ini||User_rus
		EndSwitch
		Sleep(1000)
	Wend
EndFunc
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

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

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

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

Func ThreadWatchLang 
   While 1
      Switch AUTORUN_TCLANG
         Case 'eng'
            ChangeLangEN 0
         Case 'rus'
            ChangeLangRU 0
      EndSwitch
      Sleep(1000)
   Wend
EndFunc
Но данный код, хоть и рабочий, будет вызывать смену языка каждую секунду. Поэтому нужна дополнительная проверка на смену языка, а в самих функциях убрать вызов em_команд:

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

RunThread ThreadWatchLang
Func ThreadWatchLang
   Local lng = AUTORUN_TCLANG
   While 1
      OutputDebugString("lang=" & AUTORUN_TCLANG & " lng=" & lng)
      If Not (lng = AUTORUN_TCLANG) Then
         Switch AUTORUN_TCLANG
            Case 'ENG'
               ChangeLangEN 0
            Case 'RUS'
               ChangeLangRU 0
         EndSwitch
         lng = AUTORUN_TCLANG
      Endif   
      Sleep(1000)
   Wend
EndFunc

Func ChangeLangRU(lParam)
   Local ru = %COMMANDER_PATH% & "\Ini\Start_RUS.ini"
   Local tc = %COMMANDER_PATH% & "\Ini\Start.ini"    
   ShellExec /SW_HIDE /WAIT:2000 %COMSPEC% '/c copy /y /v "%ru%" "%tc%"'  
 #  CommandExec("em_change_lang_ru")
   SendCommand 2945
EndFunc

Func ChangeLangEN(lParam)
   Local en = %COMMANDER_PATH% & "\Ini\Start_ENG.ini"
   Local tc = %COMMANDER_PATH% & "\Ini\Start.ini"    
   ShellExec /SW_HIDE /WAIT:2000 %COMSPEC% '/c copy /y /v "%en%" "%tc%"'  
#   CommandExec("em_change_lang_en")
   SendCommand 2945
EndFunc
Вместо em_команд теперь используется cm_ReloadBarIcons, все-таки она помогает Тоталу перечитывать секцию :lol:

Проверьте. Все работает.)

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

В общем, с TCIMG не должно быть никаких проблем - обычный внешний вызов с параметрами. Просто справку к ShellExec почитайте и поэксперементируйте немного. Понятно, что вы нацелены на результат и хочется всего побыстрее, но такой подход только мешает. Здесь надо сначало все изучить, а потом все само на быстром ходе задвижется.))
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а): cm_ReloadBarIcons, все-таки она помогает Тоталу перечитывать секцию :lol:
Проверьте. Все работает.)
Точно обновляет! Проверил просто с командной строки. Похоже какой-то косяк в скрипте был.
Orion9 писал(а): Autorun в этом плане и быстр, и легкочитаем. Как я уже говорил, писать на нем скрипты одно удовольствие.)
Но Autorun не умеет с секциями инишников работать. У меня такая задумка. Чтобы не мусорить, я не держу три файла, а держу один с тремя секциями User и User_lng. В зависимости от языка перезаписываю секцию User. Естественно с проверкой установленного языка. Изящное решение. Для этого нужен TCIMG. А вообще идея интересная. Но утильки Андрея у меня, в основном, применяются для запуска bar-файлов, а Autorun этого не умеет. Только не пишите мне про OPENBAR, которые открывают меню в случайном месте экрана. Вот такое можно сделать?

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

[em_restarttc.bar]
cmd=%COMMANDER_PATH%\Utilities\TCIMG\TCIMG.exe
param=<HOTKEY=11> tcimg=$emem_restarttc <HOTKEY=X> tcprm=cm_Exit||17
menu=ЛКМ - Перезапуск от администратора|Ctrl+ЛКМ - Меню перезапуска

[em_restarttc]
cmd=%COMMANDER_PATH%\Utilities\MENUIMG\MENUIMG.exe %COMMANDER_PATH%\Bars\RESTART_RUS.BAR||#INPUT
 
Кнопка, по нажатию на которую перезагружается ТС. А с Ctrl+ЛКМ вызывается меню перезагрузки с вариантами перезагрузки. Это один из очень сложных примеров использования TCIMG. Есть еще один трудный. Все остальное мелочи. У меня даже TCIMG стоит кастрированный по самые нехочу. Мне хватает для моих задач.
Ответить