Страница 2 из 5

Добавлено: Вт окт 25, 2011 18:37
cojoc
Кстати, скрипт по теме для переименования (обмена) имён двух файлов не помешал бы ;)

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

Flasher
Сперва меняется имя первого файла на имя отличное от второго, потом имя второго на имя первого, а потом имя первого на имя второго.
Да я так и думал :)

Добавлено: Вт окт 25, 2011 18:49
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

Добавлено: Вт окт 25, 2011 19:04
cojoc
Flasher спасибо!

Добавлено: Вт окт 25, 2011 21:17
ApceH
cojoc
Так а как вы перезапускаете ТС? Ведь для описанной задачи мало просто поменять местами файлы...

Добавлено: Вт окт 25, 2011 21:29
Flasher
ApceH
Делалось под исходную просьбу, поэтому и не стал добавлять.

Добавлено: Ср окт 26, 2011 22:03
cojoc
ApceH
Так а как вы перезапускаете ТС?
Руками перезагружу :)
Но я пока остановился на варианте с cesf.

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

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

А есть ли аналог (скриптовой или утилита какая) кнопки с двумя состояниями (двумя командами) (Push-button) для TC ?
(Без графического эффекта состояния кнопки, а только две команды)

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

Добавлено: Ср окт 26, 2011 23:12
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

Добавлено: Ср окт 26, 2011 23:18
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.

Добавлено: Чт окт 27, 2011 00:37
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]
Вешаем команду на кнопку и готово.
Тут использованы свободные пресеты. Если использовать специальную категорию, то ещё проще.

Добавлено: Чт окт 27, 2011 17:31
Flasher
cojoc
Вообще, конечно, с учётом числа ключей ColorFilterXColor (их может быть под сотню) с установкой значений лучше не заморачиваться, смена имён файлов будет куда быстрей отрабатывать. Если же эти ключи учитывать при смене не надо, то можно и менять значения. Коли оно так, могу выложить вчерашний скрипт, если будут предоставлены ключи с различными значениями для обеих схем.

Добавлено: Чт окт 27, 2011 19:31
cojoc
Flasher
Скрипт приведённый вами выше так понимаю с перезагрузкой?
Вообще, конечно, с учётом числа ключей ColorFilterXColor (их может быть под сотню) с установкой значений лучше не заморачиваться, смена имён файлов будет куда быстрей отрабатывать. ...
Я не совсем понял о каких ключах идёт речь, поясните пожалуйста.

Добавлено: Чт окт 27, 2011 19:37
Flasher
cojoc
Без как раз.
Ключи из секции Colors со сменяемыми значениями, как в случае с cedf.

Добавлено: Чт окт 27, 2011 19:48
cojoc
Flasher писал(а):Без как раз.
Т.е. надо будет перезагрузиться или это не нужно будет? Если надо тогда зачем ещё один да ещё с утилитой?

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

Flasher
Вообще, конечно, с учётом числа ключей ColorFilterXColor (их может быть под сотню) с установкой значений лучше не заморачиваться, смена имён файлов будет куда быстрей отрабатывать. Если же эти ключи учитывать при смене не надо, то можно и менять значения.
Ключей у меня примерно 30 и в двух схемах они одинаковые, только некоторые значения разные.

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