Страница 10 из 11
Добавлено: Вт апр 30, 2013 00:32
Flasher
ask-rus писал(а):Скомпилированные использую, например, TC Multi Comment Edit ... Носить с собой целый скриптовый язык не хочется.
+TCASwitcher. Exe-шник тут - это склейка того самого "языка" со скриптом. Вот ты как минимум уже 2 комплекта и носишь.
Добавлено: Вт апр 30, 2013 01:27
LonerD
ask-rus писал(а):Скомпилированные использую
Ну раз "скомпилированные" варианты (точнее скрипт склеенный с интерпретатором) признаёшь кошерными - то с тем же успехом, можно и AutoHotkey "скомпилировать".

Добавлено: Вт апр 30, 2013 08:30
ask-rus
Сомневаюсь, что придёт момент (задача), когда без AHK прям никуда, оффтоп.
Добавлено: Вт апр 30, 2013 14:13
CaptainFlint
[offtop]
В целях ликбеза:
mf-zl писал(а):Unicode - один символ = 2 байта
2 или 4 байта.
mf-zl писал(а):Utf-8 - один символ от 1 до 6 байтов
Нет, только от 1 до 4 байтов. 6 байтов — это результат работы кривых программ, неправильно транслирующих суррогатные пары UTF-16 — поэлементно, а не как единый символ.
[/offtop]
Добавлено: Пт май 03, 2013 18:05
Flasher
mf-zl, LonerD
У вас после вызова и подтверждения в окне в низу файла появляются строки [Associations] и [-Associations]?
Желательно проверить с редиректом и без.
Добавлено: Пт май 03, 2013 18:19
mf-zl
Flasher, Всё так.
Проверка на редирект и работа с соответствующим INI:
Код: Выделить всё
IniRead, RedirectAssociations, % COMMANDER_INI, Associations, RedirectSection, 0
Transform, INI, Deref, % (RedirectAssociations ? RedirectAssociations : COMMANDER_INI)
IniRead, Associations, % INI, Associations
[Associations] и [-Associations]:
Добавлено: Пт май 03, 2013 18:24
Flasher
mf-zl
Не нравится мне этот косяк ТС. Получается, надо ещё после окна дополнительно ini переписывать..
А саму секцию он тоже вниз кидает?
Добавлено: Пт май 03, 2013 18:28
mf-zl
Flasher писал(а):Получается, надо ещё после окна дополнительно ini переписывать..
не воткнул - что и куда переписывать?
Добавлено: Пт май 03, 2013 18:29
Flasher
mf-zl писал(а):не воткнул - что и куда переписывать?
Удалять эти строки из ini.
Добавлено: Пт май 03, 2013 18:34
mf-zl
Удалять эти строки из ini.
Ничего не надо удалять. Не понимаю о чём ты вообще!
У меня когда ассоциации
включены: [Associations]
выключены: [-Associations] с данными из [Associations]
Ты о моём
скрипте вообще говоришь?
Добавлено: Пт май 03, 2013 18:43
Flasher
Я пишу про появление указанных строк. Ты это подтвердил. Теперь пишешь, что ничего удалять не надо. Я уже тоже тебя не пойму..
Дело не в скриптах, дело в ТС.
Ещё раз вопрос: ТС добавляет одну из указанных строк после изменения секции ассоциаций и подтверждения в диалоге в конец ini-файла?
Добавлено: Пт май 03, 2013 19:33
mf-zl
Flasher, при отключении ассоциаций в конце файла создаётся секция [-Associations] в которую переносятся данные из [Associations], после чего удаляется [Associations].
Если после этого в тотале запустить cm_InternalAssociate и нажать Ок в конце ini создастся пустая секция [Associations] и, если ничего не добавлять в нее, повторный запуск скрипта перенесёт данные из заполненной [-Associations] в [Associations] и удалит [-Associations].
Добавлено: Пт май 03, 2013 19:38
Flasher
mf-zl писал(а):и удалит [-Associations]
Ну вот, а говорил
mf-zl писал(а):Ничего не надо удалять
Подтвердилось таки.
Тогда я тоже переписываю:
Код: Выделить всё
'===========================================================
' Вкл\выкл внутренние ассоциации в TC
'======================= Путь к ТСFS2 ======================
TCFS2 = """%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe"""
'===========================================================
Dim WSH : Set WSH = CreateObject("WScript.Shell")
'============= Путь к ini с секцией ассоциаций =============
INI = "%COMMANDER_PATH%\RedirectINI\Associations.ini"
'INI = "%COMMANDER_INI%"
'===========================================================
Set FSO = CreateObject("Scripting.FileSystemObject")
INI = WSH.ExpandEnvironmentStrings(INI)
Text = FSO.OpenTextFile(INI,1,,-2).ReadAll
Find1 = InStr(Text, "[Associations]") : Find2 = InStr(Text, "[-Associations]")
If Find1 Then
Text = Left(Text, Find1) & "-" & Mid(Text, Find1 + 1)
ElseIf Find2 Then Text = Left(Text, Find2) & Mid(Text, Find2 + 2) : End If
If Find1 Or Find2 Then
Set OINI = FSO.OpenTextFile(INI,2,,-2)
OINI.Write Text : OINI.Close
WSH.Run TCFS2 & "/ef ""tcm(519,1) delay(40) send({ENTER},findwnd(`TDlgCustomColors`))""", 0 , True
Set OINI = FSO.OpenTextFile(INI,2,,-2)
OINI.Write Text : OINI.Close
End If : Set WSH = Nothing : WScript.Quit
Добавлено: Пн май 06, 2013 10:14
mf-zl
Переписал скрипт. На небольших конфигах переключает ассоциации без перезапуска. Для конфигов с секцией associations более 64кб предлагает перезапуск. Прогнал на конфиге 100кб с редиректом и без. Тестируем!
Код: Выделить всё
#NoTrayIcon
#SingleInstance off
SetBatchLines, -1
SetKeyDelay, -1
SetWinDelay, -1
IniRead, RedirectAssociations, % COMMANDER_INI, Associations, RedirectSection, 0
Transform, INI, Deref, % (RedirectAssociations ? RedirectAssociations : COMMANDER_INI)
IniRead, Associations, % INI, Associations
FileRead, INIc, % INI
StringReplace, INIc, INIc, % "[" (StrLen(Associations) ? "" : "-") "Associations]", % "[" (StrLen(Associations) ? "-" : "") "Associations]"
FileDelete, % INI
FileAppend, % INIc, % INI
IniRead, Associations, % INI, Associations
If StrLen(Associations) < 65531
{ PostMessage, 1075, 519, 0,, ahk_class TTOTAL_CMD
WinWait, ahk_class TDlgCustomColors,, 3
If !ErrorLevel
ControlClick, TButton2,,,, 2
} Else
{ MsgBox, 8244, Total Commander, Associations section reached 64Kb limit!`nCannot continue without restarting Total Commander.`n`nRestart now?
IfMsgBox, Yes
TC_Restart()
}
TC_Restart() {
If WinExist("ahk_class TTOTAL_CMD")
{ WinGet, PID, PID
ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process where ProcessId=" . PID)._NewEnum()[Process]
PostMessage, 1075, 24340, 0,, % t := "ahk_class TTOTAL_CMD ahk_pid " PID
WinWait, % c := "Total Commander ahk_class #32770 ahk_pid " PID, ?, 1.5
If !ErrorLevel
WinWaitClose, % c
WinWaitClose, % t,, 1.5
If ErrorLevel
MsgBox, 8244, Total Commander, Restart cancelled!
Else
Run, % Process.CommandLine
}
}
Добавлено: Пт апр 23, 2021 14:05
lz57005
апну тему вдруг спустя 10 лет кому-то до сих пор не нравится жать кнопки скриптом... вариант без вызова диалога и нажатия кнопок:
Код: Выделить всё
TCFS2.exe /ef msg(147,0,1302100) msg(1045,0,0)
первое сообщение провоцирует перечитывание секции Associations
второе сообщение обновляет кэш иконок типов файлов