Кнопка для изменения цветовой схемы TC

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

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

cojoc
Сообщения: 144
Зарегистрирован: Пт сен 04, 2009 16:53

Сообщение cojoc »

Кстати, скрипт по теме для переименования (обмена) имён двух файлов не помешал бы ;)

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

Flasher
Сперва меняется имя первого файла на имя отличное от второго, потом имя второго на имя первого, а потом имя первого на имя второго.
Да я так и думал :)
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

cojoc писал(а):Кстати, скрипт по теме для переименования (обмена) имён двух файлов не помешал бы
Ну, это легко. Пожалуйста:

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

' Поменять местами имена двух файлов
' Параметры: "<Путь к первому файлу>" "<Путь ко второму файлу>"
' Пример: "%%COMMANDER_PATH%%\Colors\Colors.ini" "%%COMMANDER_PATH%%\Colors\Colors_.ini"
'=====================================================
With CreateObject("WScript.Shell")
  F1 = .ExpandEnvironmentStrings(WScript.Arguments(0))
  F2 = .ExpandEnvironmentStrings(WScript.Arguments(1))
End With
With CreateObject("Scripting.FileSystemObject")
  .MoveFile F1, F1 & "x"
  .MoveFile F2, F1
  .MoveFile F1 & "x", F2
End With
cojoc
Сообщения: 144
Зарегистрирован: Пт сен 04, 2009 16:53

Сообщение cojoc »

Flasher спасибо!
Аватара пользователя
ApceH
Сообщения: 316
Зарегистрирован: Пт апр 08, 2011 17:58
Откуда: Димитровград

Сообщение ApceH »

cojoc
Так а как вы перезапускаете ТС? Ведь для описанной задачи мало просто поменять местами файлы...
kIT Programs PowerPack, kIT Universal Presets | Есть только одна истинная вера: чёрная магия...
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

ApceH
Делалось под исходную просьбу, поэтому и не стал добавлять.
cojoc
Сообщения: 144
Зарегистрирован: Пт сен 04, 2009 16:53

Сообщение cojoc »

ApceH
Так а как вы перезапускаете ТС?
Руками перезагружу :)
Но я пока остановился на варианте с cesf.

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

Кстати для смены цветовой темы у способа при помощи переименования есть один плюс - одна кнопка вместо двух.

А есть ли аналог (скриптовой или утилита какая) кнопки с двумя состояниями (двумя командами) (Push-button) для TC ?
(Без графического эффекта состояния кнопки, а только две команды)
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

cojoc писал(а):Кстати для смены цветовой темы у способа при помощи переименования есть один плюс - одна кнопка вместо двух.
А перезапуск как отдельная манипуляция уже не в счёт? :wink:
cojoc писал(а):А есть ли аналог (скриптовой или утилита какая) кнопки с двумя состояниями (двумя командами) (Push-button) для TC ?
Для этого нужны хотя бы все значения ключей обеих схем.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

cojoc писал(а):Решил создать кнопку для изменения цветовой схемы TC.
Вариант на основе скрипта от Batya для вкл/выкл внутренних ассоциаций. Переименовывает правда не файлы, а секции в INI-файле с разными наборами цветов ([Colors] и [Colors2]). Противникам нажатий клавиш с помощью SendKeys следует использовать предлагаемый скрипт с заданием произвольного параметра.

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

'Описание:  Переключает цвета в TC, переименовывая друг в друга секции [Colors] и [Colors2]
'          Для вызова команд TC используется утилита TCMC (надо указать свой путь к ней)
'Параметр: Если есть (любой), то вместо обновления цветов в текущем сеансе, TC стартует снова
'--------------------------------------------------------------------------------------------
Option Explicit
Dim TCMC, TC, F, FSO, WSH, Str1 , Str2, Text  
'======== Укажите свой путь к TCMC.exe =======
TCMC = "%COMMANDER_PATH%\Utils\TCMC\TCMC.exe"
'=============================================
TC   = "%COMMANDER_PATH%\totalcmd.exe"
F    = "%COMMANDER_PATH%\wincmd.ini"
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WSH = CreateObject("WScript.Shell")
Str1 = "[Colors]"
Str2 = "[Colors2]"
F    = GetPath(F)
TC   = GetPath(TC)
TCMC = GetPath(TCMC)
Text = FSO.OpenTextFile(F, 1).ReadAll
If InStr(1, Text, Str1, 1) > 0 Then Text = Replace(Text, Str1, "#" & Str1 , 1, -1, 1)
If InStr(1, Text, Str2, 1) > 0 Then Text = Replace(Text, Str2, Str1, 1, -1, 1)
If InStr(1, Text, "#" & Str1, 1) > 0 Then Text = Replace(Text, "#" & Str1, Str2, 1, -1, 1)
FSO.OpenTextFile(F, 2).Write Text
' Wscript.Sleep(200)
If WScript.Arguments.Count > 0 Then 
  WSH.Run """" & TCMC & """ CM24340", 1, True 'Выход
  WSH.Run """" & TC   & """"        , 1, True 'Запуск TC
Else
  WSH.Run TCMC & " CM494", 1, False           'cm_ColorConfig
  Wscript.Sleep(100)
  WSH.SendKeys "+{TAB 5}  {ENTER}{TAB 2}"
End If
Set WSH = Nothing
Set FSO = Nothing
WScript.Quit

Function GetPath(pPath)
  GetPath = FSO.GetAbsolutePathName(WSH.ExpandEnvironmentStrings(pPath))
End Function
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

WSH.SendKeys "+{TAB 5} {ENTER}{TAB 2}"
{TAB 2} для чего?
WSH.Run TCMC & " CM494", 1, False
Это по умолчанию идёт, можно убрать.
Кстати, TCMC на 8-ке проглючивать стала, не находишь? Я у себя на TCFS2 в некоторых местах поменял.

Что-то не нравится мне этот способ с Replace/Write, смещает секции куда не надо. Лучше попозже с утилитой сделаю.

Конечно, если не заморачиваться, можно довести и приведённый мной скрипт до банального:

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

' Поменять местами имена двух файлов и обновить цвета
' Параметры: "<Отн. путь к первому файлу>" "<Отн. путь ко второму файлу>"
' Пример: "Colors.ini" "Colors_.ini"
'=====================================================
With CreateObject("WScript.Shell")
  TC = .Environment("Process")("COMMANDER_PATH") & "\"
  F1 = TC & WScript.Arguments(0)
  F2 = TC & WScript.Arguments(1)
  With CreateObject("Scripting.FileSystemObject")
    If .FileExists(F1) And .FileExists(F2) Then
      .MoveFile F1, F1 & "'"
      .MoveFile F2, F1
      .MoveFile F1 & "'", F2
    End If
  End With
  .Exec(TC & "Utils\TCMC\TCMC.exe CM494")
  WScript.Sleep 60 ' Не работает - увеличиваем до 100
  .SendKeys "+{TAB 5}  ~"
End With
См. путь к TCMC.
Аватара пользователя
ApceH
Сообщения: 316
Зарегистрирован: Пт апр 08, 2011 17:58
Откуда: Димитровград

Сообщение ApceH »

Моя "бандура" в действии.
Добавляем в usercmd.ini em-команду:

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

[em_SwapColors]
cmd=%COMMANDER_PATH%\ADDONS\kITUP\kITUP.exe
param=Light.up
menu=Сменить цвета
button=%COMMANDER_PATH%\ADDONS\kITUP\kITUP.exe,2
В папку %COMMANDER_PATH%\ADDONS\kITUP\Presets кидаем два up-файла с подобным содержимым:
Dark.up:

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

[Configuration]
DefaultDirectory=%COMMANDER_PATH%
;Заменяем цветовую схему Total Commander
[im|wincmd.ini|Colors]
BackColor=788488
;и так далее...
;Меняем действие кнопки на противоположное
[im|usercmd.ini|em_SwapColors]
param=Light.up
;Перезапуск Total Commander
[per|totalcmd.exe]
Light.up:

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

[Configuration]
DefaultDirectory=%COMMANDER_PATH%
;Заменяем цветовую схему Total Commander
[im|wincmd.ini|Colors]
BackColor=16579836
;и так далее...
;Меняем действие кнопки на противоположное
[im|usercmd.ini|em_SwapColors]
param=Dark.up
;Перезапуск Total Commander
[per|totalcmd.exe]
Вешаем команду на кнопку и готово.
Тут использованы свободные пресеты. Если использовать специальную категорию, то ещё проще.
kIT Programs PowerPack, kIT Universal Presets | Есть только одна истинная вера: чёрная магия...
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

cojoc
Вообще, конечно, с учётом числа ключей ColorFilterXColor (их может быть под сотню) с установкой значений лучше не заморачиваться, смена имён файлов будет куда быстрей отрабатывать. Если же эти ключи учитывать при смене не надо, то можно и менять значения. Коли оно так, могу выложить вчерашний скрипт, если будут предоставлены ключи с различными значениями для обеих схем.
cojoc
Сообщения: 144
Зарегистрирован: Пт сен 04, 2009 16:53

Сообщение cojoc »

Flasher
Скрипт приведённый вами выше так понимаю с перезагрузкой?
Вообще, конечно, с учётом числа ключей ColorFilterXColor (их может быть под сотню) с установкой значений лучше не заморачиваться, смена имён файлов будет куда быстрей отрабатывать. ...
Я не совсем понял о каких ключах идёт речь, поясните пожалуйста.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

cojoc
Без как раз.
Ключи из секции Colors со сменяемыми значениями, как в случае с cedf.
cojoc
Сообщения: 144
Зарегистрирован: Пт сен 04, 2009 16:53

Сообщение cojoc »

Flasher писал(а):Без как раз.
Т.е. надо будет перезагрузиться или это не нужно будет? Если надо тогда зачем ещё один да ещё с утилитой?

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

Flasher
Вообще, конечно, с учётом числа ключей ColorFilterXColor (их может быть под сотню) с установкой значений лучше не заморачиваться, смена имён файлов будет куда быстрей отрабатывать. Если же эти ключи учитывать при смене не надо, то можно и менять значения.
Ключей у меня примерно 30 и в двух схемах они одинаковые, только некоторые значения разные.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

cojoc писал(а):Т.е. надо будет перезагрузиться или это не нужно будет? Если надо тогда зачем ещё один да ещё с утилитой?
Утилита уже есть. Так? Проверить и посмотреть результат вместо лишних вопросов - не проще? :wink:
cojoc писал(а):только некоторые значения разные.
Сколько разных?
Ответить