lz57005
...А ваше сообщение, являясь дублем этого, нарушает правила форума. Дублировать информацию не надо ни в разных подфорумах, ни в одном. Про заглавные буквы и точки в правилах тоже говорится. Получите замечание по совокупности достижений.
Кнопка вкл\выкл "внутренние ассоциации"
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
Не ждали через 5 лет?
А тем временем появилось более современное и интегрированное решение данной задачи.
Спасибо пользователю lz57005 за отлов нужных сообщений. Именно благодаря этим сообщениям переключение ассоциаций происходит очень гладко.
Пример из справки плагина Autorun:
[cut][/cut]
Установка и настройка плагина имеет ряд особенностей и выходит за рамки топика. Что касается последней версии, то
[cut]На данный момент это 2.2.21.3 (15.10.2025)
Инструкция по установке плагина
https://total.darkhost.ru/wiki/doku.php?id=ru:autorun
Особенности последней версии. Для версии 2.2.21.3 нет полного архива с дополнительными модулями (субплагинами) и файлами справки, установку придется проводить в два этапа. Сначала нужно установить версию 2.2.21 от 28.09.2025
https://total.darkhost.ru/files/autorun ... 1_beta.zip
Поверх неё накатить последний модуль от 15.10.2025
https://total.darkhost.ru/files/temp/au ... 251015.zip[/cut]
К скрипту из справки можно добавить функцию для гладкого переключения иконки на панели инструментов. Создается переменная окружения, которая сохраняет путь к иконке в зависимости от состояния секции в ini. Эта переменная окружения прописывается в кнопку в качестве иконки. Пример функции
При старте ТС функция AssocState() должна быть один раз вызвана для инициализации текущего состояния. После переключения она вызвается еще раз с посылкой всех сообщений и перерисовкой экрана.
Иконка переключается очень гладко, практически как родная иконка ТС. Отдельный тест переключения иконки
Спасибо пользователю lz57005 за отлов нужных сообщений. Именно благодаря этим сообщениям переключение ассоциаций происходит очень гладко.
Пример из справки плагина Autorun:
[cut]
Код: Выделить всё
# Автор — Flasher
# Включение/отключение внутренних ассоциаций
RegisterCommand 64000 SwitchInternalAssociations
Func SwitchInternalAssociations(lParam)
Local oIni = TextFile(COMMANDER_INI), Enc = oIni.Encoding, i, Str1, Str2, _
Pos1, Pos2, x = 15, Text, FSize = FileGetSize(COMMANDER_INI), Mess
Free(oIni)
oIni = BinaryFile(COMMANDER_INI, 'rw-d')
While oIni.Pos < FSize
i += 15
Str1 = oIni.ReadStr(15, Enc)
Pos1 = StrPos(Str2 & Str1, '[Associations]')
Pos2 = StrPos(Str2 & Str1, '[-Associations]')
If Str2 <> '' Then x = 30
If Pos1 Then
oIni.Pos = 0
Text = oIni.ReadStr(i - x + Pos1, Enc) & '-' & oIni.ReadStr(0, Enc)
oIni.Pos = 0
oIni.WriteStr(Text, 0, Enc)
Free(oIni)
Mess = 'ОТКЛЮЧЕНЫ!'
Break
ElseIf Pos2 Then
oIni.Pos = 0
Text = oIni.ReadStr(i - x + Pos2, Enc)
oIni.Seek(1, 1)
Text = Text & oIni.ReadStr(0, Enc)
Free(oIni)
FileWrite(COMMANDER_INI, Text, Enc)
Mess = 'ВКЛЮЧЕНЫ!'
Break
EndIf
Str2 = Str1
Wend
Static aCounter
aCounter += 1
If Mess = '' Then
Mess = 'ОТСУТСТВУЮТ!'
Else
PostMessage(AUTORUN_TCHANDLE, 147, 0, 1302100)
If aCounter = 1 And Mess = 'ВКЛЮЧЕНЫ!' Then
PostMessage(AUTORUN_TCHANDLE, 1045)
Else
SendCommand(2958)
EndIf
EndIf
ShowHint('Внутренние ассоциации ' & Mess, -1000, -1000, 1500, 1)
WinAlign(LAST_HINT_WINDOW, 0, RequestInfo(3), 0)
EndFuncУстановка и настройка плагина имеет ряд особенностей и выходит за рамки топика. Что касается последней версии, то
[cut]На данный момент это 2.2.21.3 (15.10.2025)
Инструкция по установке плагина
https://total.darkhost.ru/wiki/doku.php?id=ru:autorun
Особенности последней версии. Для версии 2.2.21.3 нет полного архива с дополнительными модулями (субплагинами) и файлами справки, установку придется проводить в два этапа. Сначала нужно установить версию 2.2.21 от 28.09.2025
https://total.darkhost.ru/files/autorun ... 1_beta.zip
Поверх неё накатить последний модуль от 15.10.2025
https://total.darkhost.ru/files/temp/au ... 251015.zip[/cut]
К скрипту из справки можно добавить функцию для гладкого переключения иконки на панели инструментов. Создается переменная окружения, которая сохраняет путь к иконке в зависимости от состояния секции в ini. Эта переменная окружения прописывается в кнопку в качестве иконки. Пример функции
Код: Выделить всё
Func AssocState()
Local flt
IniRead /R flt %COMMANDER_INI% "Associations" "Filter1" ""
# секция включена
If flt <> "" Then
SetEnv ICON_ASSOC "%COMMANDER_PATH%\Icons\Assoc\1.ico"
Return true
Endif
# секция выключена
SetEnv ICON_ASSOC "%COMMANDER_PATH%\Icons\Assoc\2.ico"
Return false
EndFuncКод: Выделить всё
AssocState()
SendMessage(AUTORUN_TCHANDLE, 11, 0, 0)
SendMessage(AUTORUN_TCHANDLE, 1045, 0, 0)
SendCommand cm_ReloadBarIcons
Sleep(10)
SendMessage(AUTORUN_TCHANDLE, 11, 1, 0)
WinRedraw(1) Код: Выделить всё
RegisterCommand 61002 "SwitchTestIcon"
SetEnv ICON_TEST "%COMMANDER_PATH%\Icons\Test\1.ico"
Func SwitchTestIcon()
Static c = false
c = (c = false ? true : false)
If c Then
# действия при включении
SetEnv ICON_TEST "%COMMANDER_PATH%\Icons\Test\1.ico"
Else
# действия при выключении
SetEnv ICON_TEST "%COMMANDER_PATH%\Icons\Test\2.ico"
Endif
SendMessage(AUTORUN_TCHANDLE, 11, 0, 0)
SendCommand 2945 # cm_ReloadBarIcons
Sleep(10)
SendMessage(AUTORUN_TCHANDLE, 11, 1, 0)
WinRedraw(1)
EndFuncКод: Выделить всё
TOTALCMD#BAR#DATA
61002
%ICON_TEST%
Тест переключения иконки
1
-1
Забыл написать, может кому-то пригодится.
Когда включены внутренние ассоциации, иногда требуется открыть файл под курсором внешним приложением. Как вариант повесил себе для этого Win+Enter
Вроде удобно
Когда включены внутренние ассоциации, иногда требуется открыть файл под курсором внешним приложением. Как вариант повесил себе для этого Win+Enter
Код: Выделить всё
SetHotkeyAction /K:W /H:ENTER /S "RunThread" "LaunchBySystem"
Func LaunchBySystem()
Local sFile = RequestCopyDataInfo("SP") & RequestCopyDataInfo("SN")
If Not FileExist(sFile) Then
ShowHint("Файл не существует " & sFile)
Return
EndIf
ShellExec("explorer.exe", sFile)
EndFunc