Orion9

|
Posted: Sat May 23, 2026 13:59 Post subject: |
|
|
Кнопка для загрузки иконок текущего файла под курсором на главную панель инструментов. Поддерживаются любые типы файлов - ico, icl, dll и exe.
Требуются плагин Autorun
https://total.darkhost.ru/wiki/doku.php?id=ru:autorun
Плагин IconLibrary
http://wincmd.ru/plugring/iconlibrary.html
Кнопка создает временную панель инструментов и загружает ее на главную панель. Файл панели сохраняется в %COMMANDER_PATH%\Bars\Auto_icons.bar. Путь можно изменить в функции CreateIconsBar.
Для работы скрипта необходимо добавить пользовательскую команду em_open_icons_panel в файл usercmd.ini
| Code: | [em_open_icons_panel]
cmd=OPENBAR1
param=%|COMMANDER_PATH|\Bars\Auto_icons.bar |
Пользуясь этой командой, можно вызывать последнюю созданную панель в любой момент времени без создания новой.
Код кнопки 62005 можно изменить или привязать к em_команде
| Code: | [em_load_icons]
cmd=62005 |
Полученной em_команде можно назначить горячую клавишу стандартными средствами ТС.
В кнопке действую два модификатора: Ctrl и Shift
 Hidden text TOTALCMD#BAR#DATA
62005
%COMMANDER_EXE%
Загрузить иконки файла|CTRL - Загрузить Shell32.dll|SHIFT - Перейти к Shell32.dll
0
-1
Код Autorun можно добавить к главной конфигурации плагина или в любой другой модуль
 aucfg | Code: | RegisterCommand 62005 "LoadIconsToPanel"
#RegisterCommand 62006 "Reserved"
Func LoadIconsToPanel()
Local sPath, sName, sFile, sHint, nIcons
Local bCtrl = IsPressed(0x11), bShift = IsPressed(0x10)
# файл под курсором
sPath = RequestCopyDataInfo("SP")
sName = RequestCopyDataInfo("SN")
sFile = sPath & sName
# модификаторы
If bCtrl Or bShift Then
sFile = GetKnownFolderPath("System") & "\shell32.dll"
Endif
# переход к shell32.dll
If bShift Then
CommandExec /CD:S %sFile%
Return
Endif
# проверка существования
If Not FileExist(sFile) Then
DarkHint("Файл не существует " & sFile)
Return
Endif
# каталог под курсором
If StrPos(FileGetAttr(sFile), "D") Then
DarkHint("Нет иконок" & auCRLF & "Каталог " & sFile)
Return
Endif
# загрузка плагина
Local obj = Plugin("IconLibrary")
If ERROR <> 0 then
Return DarkHint("Plugin Error " & ERROR)
EndIf
# получение данных для текущего файла
obj.FileName = sFile
nIcons = obj.GetValue(0)
# освобождение объекта
Free(obj)
If nIcons > 0 then
sHint = "Иконок: " & nIcons
CreateIconsBar(sFile, nIcons) # создание панели
Else
sHint = "Нет иконок"
Endif
# добавление имени файла к подсказке
sHint &= auCRLF & "Файл " & sFile
If nIcons = 0 Then DarkHint(sHint)
EndFunc
Func CreateIconsBar(FileName, Icons)
Local sName = "Auto_icons"
Local sPath = COMMANDER_PATH & "\Bars\"
Local sFile = sPath & sName & ".bar"
DarkHint("Загрузка иконок")
If Not CreateNewBarFile(sPath, sName) Then
DarkHint("Отмена операции")
Return
EndIf
For i = 2 to Icons + 1
IniWrite %sFile% "Buttonbar" %"'Cmd' & i" "100000"
IniWrite %sFile% "Buttonbar" %"'Menu' & i" %"i-2"
IniWrite %sFile% "Buttonbar" %"'Button' & i" %"FileName & ',' & i-2"
Next
IniWrite %sFile% "Buttonbar" "Buttoncount" %"Icons+1"
DarkHint("Панель иконок:" & auCRLF & i-1 & " кнопок создано.")
CommandExec("em_open_icons_panel")
EndFunc
# создание новой панели (путь, имя, кнопка возврата)
Func CreateNewBarFile(BarDir, BarName, BackButton = true)
Local bar, br2, def
bar = BarDir & BarName & ".bar"
br2 = BarDir & BarName & ".br2"
ShellExec /SW_HIDE /WAIT:2000 %COMSPEC% "/c del /f /q ""%bar%"""
ShellExec /SW_HIDE /WAIT:2000 %COMSPEC% "/c del /f /q ""%br2%"""
If FileExist(bar) Then
DarkHint("Ошибка удаления " & bar)
Return false
Endif
IniWrite %bar% "Buttonbar" "Buttoncount" "0"
If ERROR = 1 Then
DarkHint("Ошибка создания " & bar)
Return false
EndIf
IniRead def %COMMANDER_INI% "Buttonbar" "Buttonbar" "%COMMANDER_PATH%\DEFAULT.BAR"
If BackButton Then
IniWrite %bar% "Buttonbar" "Button1" "wcmicons.dll,15"
IniWrite %bar% "Buttonbar" "Cmd1" %def%
IniWrite %bar% "Buttonbar" "Menu1" "Вернуться"
Endif
Return true
EndFunc
Func DarkHint(Hint, Delay = 0, Flags = 0)
# формат подсказки
SetHintParam("ShowHint", "Font", 10, "Arial")
SetHintParam("ShowHint", "BackColor", 0x001C1C1C)
SetHintParam("ShowHint", "Text", 0xFFFFFF)
# отображение подсказки
ShowHint(Hint, "", "", Delay, Flags)
# возвращение формата по умолчанию
Sleep(100)
SetHintParam("ShowHint", "Reload")
EndFunc
|
|
|