Страница 1 из 1

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

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

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

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

' 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.

Добавлено: Вс июл 27, 2008 10:17
Вахмурка
Скрипт с похожей функциональностью. Для работы необходим PowerPro.

Добавлено: Вс июл 27, 2008 11:23
Victor_Dobrov
Вахмурка
Неплохие возможности PowerPro снижает необходимость его установки, что не всегда и не на всех компах доступно.

Именно поэтому этот скрипт (TSet.vbs) специально рассчитан на Portable-сборку.

Добавлено: Вс июл 27, 2008 13:58
Rodny
Victor_Dobrov писал(а):Для работы скрипта требуется Script Helper ActiveX...
...этот скрипт (TSet.vbs) специально рассчитан на Portable-сборку.
А разве Script Helper не требует регистрации? Тогда какая ж это Portable?

Добавлено: Вс июл 27, 2008 15:58
Victor_Dobrov
Rodny писал(а):А разве Script Helper не требует регистрации? Тогда какая ж это Portable?
Нормальная. Скрипт автоматом регистрирует TCWSHelp.exe, если его нет и продолжает работу. Флешка с моей сборкой, подключенная к другому компу, запускает скрипт настроек без проблем.