AkulaBig
Ну вот, использовал ваш скрипт для переключения внутренних ассоциаций в Autorun

Говорил же: добавьте названия секций в параметры и сделайте небольшую документацию в шапке - получится отличный универсальный скрипт для обмена секциями в ini.
[cut="ChangeAssoc.vbs"]
Код: Выделить всё
Dim objArgs
Dim objShell
Dim arrLang
arrLang = Array("[+Associations]", "[-Associations]")
Set objShell = WScript.CreateObject("WScript.Shell")
INI = objShell.ExpandEnvironmentStrings("%COMMANDER_PATH%\Ini\Associations.ini")
Text = CreateObject("Scripting.FileSystemObject").OpenTextFile(INI, 1).ReadAll
for i = 0 to UBound(arrLang)
If InStr(1, Text, arrLang(i), 1) = 0 Then
Text = Replace(Text, "[Associations]", arrLang(i), 1, 1, 1)
exit for
End If
next
Set objArgs = WScript.Arguments
If InStr(1, Text, objArgs(0), 1) Then
Text = Replace(Text, objArgs(0), "[Associations]", 1, 1, 1)
With CreateObject("Scripting.FileSystemObject")
.OpenTextFile(INI, 2).Write Text
.OpenTextFile(INI, 1).Close
End With
End If
With CreateObject("Scripting.FileSystemObject")
.OpenTextFile(INI, 2).Write Text
.OpenTextFile(INI, 1).Close
End With
Set objShell = Nothing
WScript.Quit
[/cut]
[cut="autorun.cfg"]
Код: Выделить всё
RegisterCommand 61003 "SwitchAssocState"
# первое выполнение при запуске
AssocState()
Func AssocState()
Local f1, res
IniRead /R f1 %COMMANDER_INI% "Associations" "Filter1" ""
# если в секции что-то есть, значит она включена
If f1 <> "" Then
SetEnv TEST_ICON "%COMMANDER_PATH%\Icons\Clsw\2.ico"
res = true
Else
SetEnv TEST_ICON "%COMMANDER_PATH%\Icons\Clsw\6.ico"
res = false
Endif
Return res
EndFunc
Func SwitchAssocState(lParam)
Local script = %COMMANDER_PATH% & "\Scripts\Vbs\ChangeAssoc.vbs", sect
If AssocState() Then
# отключение секции
sect = '[-Associations]'
Else
# включение секции
sect = '[+Associations]'
Endif
ShellExec /SW_HIDE /WAIT:3000 '%windir%\system32\cscript.exe' '"%script%" "%sect%"'
AssocState()
SendMessage(AUTORUN_TCHANDLE, 11, 0, 0)
CommandExec cm_ReloadFileIcons
CommandExec cm_ReloadBarIcons
sleep(10)
SendMessage(AUTORUN_TCHANDLE, 11, 1, 0)
WinRedraw(1)
EndFunc
[/cut]
[cut]
Код: Выделить всё
TOTALCMD#BAR#DATA
61003
%TEST_ICON%
Внутренние ассоциации
1
-1
[/cut]
Все четко и гладко работает, но, блин... кажется, нашел баг в ТС (если это баг, конечно).
Жалею теперь, что потратил полчаса, пытаясь понять, где я накосячил, а оказывается в TCASwitcher.exe всё то же самое было.
Если при запуске ТС внутренние ассоциации включены, то никаких проблем нет - все работает как часы. Но если при запуске ассоциации выключены, то переключение не работает. Вернее оно работает с багом: значок переключается, а ассоциации нет. Только перезагрузка помогает. Как я понял, причина здесь в команде cm_ReloadFileIcons, которая не перечитывает значки (хотя должна), если при старте ТС секция ассоциаций была пустая. Но если секция была наполнена, то все работает.
Avada, вам вопрос (или, может быть, еще кто-то ответит, кто знает): как ТС определяет, что включены или выключены внутренние ассоциации? И баг ли это с cm_ReloadFileIcons, а то может Гислеру надо сообщить?