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 

Быстрое переключение и экспорт настроек

 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Victor_Dobrov



Joined: 15 Jul 2008
Posts: 50

Post (Separately) Posted: Sun Jul 27, 2008 09:51    Post subject: Быстрое переключение и экспорт настроек Reply with quote

Предлагаю скрипт загрузки/экспорта/отката всех или указанных в командной строке секций файла Wincmd.ini. Это может пригодится при обмене конфигурациями или цветовыми настройками TC или для временного тестирования чужих ini-файлов. В моей сборке Total Commander Expert этот скрипт используется для быстрого переключения различных конфигураций и цветовых настроек.

Примеры параметров командной строки:
    нет - откроет диалог и при выборе ini/tset-файла применит настройки
    /B - восстановить предыдущие настройки (если найден backup-файл)
    /ini:<файл> Alls - экспортирует все секции (без истории) в ini-файл
    /tset:<файл> <названия секций через пробел> - экспорт указанных секций
    /tset:<файл> </add> Alls - экспорт всех секции (без истории) в tset-файл
    без ключа /add в Wincmd.ini сначала удаляются все перечисленные секции
Code:

' TSet.vbs - загрузка/импорт/экспорт/откат настроек Total Commander, расширение возможностей утилиты TSet.exe.
' Возможности: 1) перезапустить коммандер с настройками из tset-файла; 2) экспортировать все или заданные секции настроек в ini или tset-файл 3)восстановить предыдущую конфигурацию
' параметры: 1) отсутствуют - загрузить настройки 2) /ini:<имя ini-файла> или /tset:<имя tset-файла>, <названия секций> для экспорта в файл, если не указывать, выполняется импорт из tset-файла настроек. 3) /B - откат настроек.

On Error Resume Next

Set WshShell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")

ScriptPath = FSO.GetFile(WScript.ScriptFullName).ParentFolder & "\"
Commander_Path = WshShell.ExpandEnvironmentStrings("%COMMANDER_PATH%")
BaseIni = WshShell.ExpandEnvironmentStrings("%COMMANDER_INI%") : If BaseIni = "%COMMANDER_INI%" Then WScript.Quit   'BaseIni = TCS.MainINI

   Set TCS = CreateObject("TCScript.Helper")   'пропишите ваш путь к TCWSHelp.exe
If not IsObject(TCS) Then WshShell.Run Quote(Commander_Path & "\Scripts\TCWSHelp.exe") & " /REGSERVER",,True : _
   Set TCS = CreateObject("TCScript.Helper")
If not IsObject(TCS) Then MsgBox "Script Helper ActiveX for Total Commander" & vbTab & VbCr & VbCr & "для регистрации в системе выполните:" & VbCr & "TCWSHelp.exe /REGSERVER",vbSystemModal + vbInformation,"Отсутствует компонент ActiveX" : _
   WScript.Quit   'ошибка регистрации

if WScript.Arguments.Count = 0 Then    'выбрать файл конфигурации
   Result = OpenFile(4, ScriptPath, "Цвета и настройки TC (*.tset)|*.tset|Файлы конфигурации (*.ini)|*.ini|Все файлы (*.*)|*.*", 1)
   If Result = "" Then WScript.Quit   'Отмена' в диалоге выбора файла
Else
   Result = WScript.Arguments.Unnamed(0)   'tset-файл указан
End If
   Result = WshShell.ExpandEnvironmentStrings(Result)

If FSO.FileExists(Result) Then   'применить настройки, если файл выбран или указан в параметрах
  If FSO.GetExtensionName(Result) = "ini" Then
   If InstrRev(Result, "\") = 0 Then Result = ScriptPath + Result   'имя файла было указано без пути
   If Len(TCS.INIReadSection(Result, "Configuration")) = 0 Then MsgBox "Указанный файл конфигурации" & vbTab & VbCr & "не подходит к Total Commander",vbSystemModal + vbInformation,"Ошибка: " & FSO.GetFile(Result).Name : WScript.Quit
     FSO.GetFile(BaseIni).Name = FSO.GetFile(BaseIni).Name & ".bak"    'зарезервировать текущие настройки
   FSO.GetFile(Result).Copy BaseIni, true   'подсунуть TC выбранный ini-файл
   WshShell.Run Quote(ScriptPath & "TSet.exe") & " /R"
  Else
   WshShell.Run Quote(ScriptPath & "TSet.exe ") & Result,,True
  End If
   MsgBox "Для отката к прежним настройкам выберите" & vbTab & VbCr & "в меню 'Тема' пункт 'Вернуть предыдущие...'",vbSystemModal + vbInformation,"Загружены новые настройки TC"
   WScript.Quit
End If   'иначе экспорт конфигурации в ini или tset-файл

If WScript.Arguments(0) = "/B" Then   'возврат к резервной копии настроек
   If FSO.FileExists(BaseIni & ".bak") Then
      WshShell.Run Quote(ScriptPath & "TSet.exe") & " /B",,True
      MsgBox "Прежние настройки восстановлены." & vbTab,vbSystemModal + vbInformation,"Откат настроек"
   Else
      MsgBox "Отсутствует резервный файл:" & vbCrLf & vbCrLf & BaseIni & ".bak",,"Ошибка отката настроек"
   End If
  WScript.Quit
End If

   FileName = "Моя тема"
For i = 0 To WScript.Arguments.Unnamed.Count-1   'все параметры одной строкой
   Sections = Sections + " " + WScript.Arguments.Unnamed.Item(i)
Next
If Len(Sections) = 0 or InStr(LCase(Sections), "alls") > 0 Then
   Sections = "Configuration Confirmation Layout Lister Extensions Packer PackerPlugins ListerPlugins FileSystemPlugins ContentPlugins Shortcuts Buttonbar Tabstops Colors Searches LeftTabs RightTabs CustomFields HintsCustomField ThumbsCustomField DriveHints DirMenu User 800x600 1024x768 1280x800 1280x1024 1600x1200 1920x1440"    'список секций Wincmd.ini, экспортируемых по-умолчанию
   FileName = "Мои настройки"    'добавьте свои разрешения монитора в Sections
End If

if WScript.Arguments.Named.Exists("ini") then
   Result = WScript.Arguments.Named.Item("ini")
   FileType = ".ini"      'экспортировать ini-файл TC
Else
   Result = WScript.Arguments.Named.Item("tset")
   FileType = ".tset"   'экпорт по-умолчанию
End If
   Result = WshShell.ExpandEnvironmentStrings(Result)

If Result = "" Then   'в параметрах указаны только названия секций (или Alls)
   Result = SaveFile(FileName + FileType, "*" + FileType)
   If Result = "" Then WScript.Quit   'Отмена' в диалоге выбора файла
End If

If FSO.GetExtensionName(Result) = "" Then Result = Result + FileType    'в диалоге выбора имя введено без расширения

If InstrRev(Result, "\") = 0 Then Result = ScriptPath + Result   'имя файла было указано без пути

   FSO.GetFile(Result).Name = FSO.GetFile(Result).Name & ".bak" : FSO.DeleteFile Result, True

If FileType = ".tset" Then WriteFile Result, "@TSET" & VbCrLf & "@MAIN"   'создать tset-файл
   Sections = Split(LTrim(Sections))

For i = 0 To Ubound(Sections)
  If Sections(i) = "800x600" Or Sections(i) = "1024x768" Or InStr(Sections(i), "1280x") > 0 Or InStr(Sections(i), "1600x") > 0 Or InStr(Sections(i), "1920x") > 0 Then Sections(i) = Sections(i) + " (8x16)"
   Values = TCS.INIReadSection(BaseIni, Sections(i))
  If Len(Values) > 0 Then   'секция найдена и не пуста
   If FileType = ".tset" And Not WScript.Arguments.Named.Exists("add") Then _
      WriteFile Result, "-[" & Sections(i) & "]"      'удалять секции из Wincmd.ini перед импортом tset-файла
   TCS.INIWriteSection Result, Sections(i), Values
      WriteFile Result, vbNullString   'для красоты разделим секции пустой строкой
  End If
Next

Function SaveFile(File, Filters)
Set objDialog = CreateObject("SAFRCFileDlg.FileSave")
   objDialog.FileName = File
   objDialog.FileType = Filters
   intReturn = objDialog.OpenFileSaveDlg   'или OpenFileOpenDlg
   If intReturn Then SaveFile = objDialog.FileName
End Function

Function OpenFile(Flags, InitialDir, Filters, Index)
Set objDialog = CreateObject("UserAccounts.CommonDialog")
   objDialog.InitialDir = InitialDir
   objDialog.Flags = Flags
   objDialog.FilterIndex = Index
   objDialog.Filter = Filters
  intResult = objDialog.ShowOpen
   If intResult Then OpenFile = objDialog.FileName
End Function

Function WriteFile(File, Line)
   Set TextStream = FSO.OpenTextFile(File, 8, True)
   TextStream.WriteLine Line
   TextStream.Close
End Function

Function Quote(PathFile)   'заключить в кавычки, если путь содержит пробелы
   If InstrRev(PathFile," ") = 0 Then Quote = PathFile Else Quote = Chr(34) & PathFile & Chr(34)
End Function

P.S. Для работы скрипта требуется Script Helper ActiveX for Total Commander и утилита TSet.exe.
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2584
Location: Большая деревня Москва

Post (Separately) Posted: Sun Jul 27, 2008 10:17    Post subject: Reply with quote

Скрипт с похожей функциональностью. Для работы необходим PowerPro.
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
Victor_Dobrov



Joined: 15 Jul 2008
Posts: 50

Post (Separately) Posted: Sun Jul 27, 2008 11:23    Post subject: Reply with quote

Вахмурка
Неплохие возможности PowerPro снижает необходимость его установки, что не всегда и не на всех компах доступно.

Именно поэтому этот скрипт (TSet.vbs) специально рассчитан на Portable-сборку.
Back to top
View user's profile Send private message
Rodny



Joined: 24 Jan 2007
Posts: 949
Location: Могилёв, Беларусь

Post (Separately) Posted: Sun Jul 27, 2008 13:58    Post subject: Reply with quote

Victor_Dobrov wrote:
Для работы скрипта требуется Script Helper ActiveX...
...этот скрипт (TSet.vbs) специально рассчитан на Portable-сборку.
А разве Script Helper не требует регистрации? Тогда какая ж это Portable?
Back to top
View user's profile Send private message
Victor_Dobrov



Joined: 15 Jul 2008
Posts: 50

Post (Separately) Posted: Sun Jul 27, 2008 15:58    Post subject: Reply with quote

Rodny wrote:
А разве Script Helper не требует регистрации? Тогда какая ж это Portable?

Нормальная. Скрипт автоматом регистрирует TCWSHelp.exe, если его нет и продолжает работу. Флешка с моей сборкой, подключенная к другому компу, запускает скрипт настроек без проблем.
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
Page 1 of 1

 
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