Значит у вас будет возможность оценить прикол с фоном!
Autorun
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
Ну, вроде как доделал...)
jensoto
Знаю, что вы не кодер и вам непросто разобраться в этой скриптовой джамба-мамбе, но с плагином Autorun по-другому не получится. Чтобы им пользоваться в полной мере, придется немного изучить основы программирования и скриптинга. И все же это необязательно, если есть готовые решения! Поэтому я постарался, чтобы все было максимально в завершенном виде, готовом сразу к применению.
Требуются все последние обновления плагина, которые можно найти на предыдущих страницах темы, в частности Autorun_Process.dll и Autorun_Runtime.dll.
Отдельный файл конфигурации Backdrop.aucfg необходимо подключить к основной кофигурации плагина autorun.cfg строкой Pragma, например:
Путь может быть любым. Содержимое файла:
[cut="Backdrop.aucfg"][/cut]
На панели должно быть две кнопки: одна - для запуска отслеживания, другая - для выбора элемента из меню.
[cut][/cut]
[cut][/cut]
Клавиши-модификаторы для первой кнопки указаны в ее подсказке. При нажатии на первую кнопку запускается процесс слежения за буфером (проверка буфера 4 раза в секунду). Если в буфере находится десятичное число, оно применяется к цвету активного элемента, выбранного для слежения (этот элемент можно выбрать из меню второй кнопки). По-умолчанию при запуске первым элементом для отслеживания становится сам фон панелей, т.е. два его значения (фон1 и фон2), которые при равенстве делают фон однотонным. Чтобы пользоваться с комфортом, понадобится утилита ColorMania, в которой необходимо выбрать формат цвета "Powerbuilder". При удержании CTRL значения из ColorMania применяются к настройкам ТС в реальном времени. При отпускании CTRL - значения снова берутся из буфера. Это дает возможность примеривать цвета из ColorMania на лету оценивая результат, который не применится до тех пор, пока не будет нажата кнопка "Copy", копирующая значение ColorMania в буфер. Если что-то пойдет не так, есть пункт "Первоначальные значения секции [Colors]", который откроет редактор со значениями цветов, установленных во время запуска ТС. Можно просто скопировать в буфер нужно значение, и оно снова применится к настройкам.
Для удобства сохранения цветов фона есть отдельная панель, которую можно использовать в виде меню как третью кнопку. На панеле есть команда "Сохранить фон", которая, соответственно, сохраняет текущий фон панели и добавляет его к самой себе. Пример такой панели:
[cut="Backdrops.bar"][/cut]
Чтобы все заработало, необходимо указать корректные пути к этой панели, утилите TCFS2 и AkelPad, которые, конечно, могут и будут отличаться от ваших. Делается это в заголовке (начале) файла Backdrop.aucfg.
Ну вот и все. Пользуйтесь на здоровье! )
[cut="Disclaimer"]Разработка не призвана полностью заменить встроенный функционал ТС. За порчу ваших цветов я не отвечаю
[/cut]
jensoto
Знаю, что вы не кодер и вам непросто разобраться в этой скриптовой джамба-мамбе, но с плагином Autorun по-другому не получится. Чтобы им пользоваться в полной мере, придется немного изучить основы программирования и скриптинга. И все же это необязательно, если есть готовые решения! Поэтому я постарался, чтобы все было максимально в завершенном виде, готовом сразу к применению.
Требуются все последние обновления плагина, которые можно найти на предыдущих страницах темы, в частности Autorun_Process.dll и Autorun_Runtime.dll.
Отдельный файл конфигурации Backdrop.aucfg необходимо подключить к основной кофигурации плагина autorun.cfg строкой Pragma, например:
Код: Выделить всё
Pragma Include %COMMANDER_PATH%\Ini\Autorun\Backdrop.aucfg[cut="Backdrop.aucfg"]
Код: Выделить всё
# Ctrl+Shift+"+" - Повышение тонов
# Ctrl+Shift+"-" - Понижение тонов
# Ctrl+"+" - Автоповышение тонов
# Ctrl+"-" - Автопонижение тонов
# ESC - Выход из автоперебора
# Alt+"+" - Показ текущих значений
Pragma IncludeOnce
Global Pulsar = 0, BACKDROP_THREAD = 0, BackColor1 = 0, BackColor2 = 0, Previous1 = 0, Previous2 = 0
Global CF_NAME = "", CF_VALUE = -1, CF_KEY = 0, CF_COLOR_KEY = 0, WRITE_COLOR_MODE = 0, CL_KEY = "", CL_VALUE = -1, CL_SNAP = ""
Global CL_MousePosX = 0, CL_MousePosY = 0
# панель для запоминания
Global CL_BAR = %COMMANDER_PATH% & "\Bars\Backdrops.bar"
# путь к редактору
Global CL_AKEL4 = %COMMANDER_PATH% & "\Utilites\AkelPad\AkelPad.exe", CL_TCFS2 = ""
# путь к TCFS2 для отправки сообщений
Set /EV- CL_TCFS2 "%COMMANDER_PATH%\Utilites\TCFS2\TCFS2.exe"
# повышение/понижение тонов
SetHotkeyAction /K:C /K:S /V:187 /R /DM SetBackGround 1
SetHotkeyAction /K:C /K:S /V:189 /R /DM SetBackGround 2
# авто
SetHotkeyAction /K:C /V:187 SetPulsar 1
SetHotkeyAction /K:C /V:189 SetPulsar 2
# показать текущие значения
SetHotkeyAction /K:A /V:187 ShowBackColor 1000
# 70000-70050
# первоначальные значения цветов
# 0 - запомнить
# 1 - открыть в редакторе
RegisterCommand 70000 "InitialColors" 1
# регистрация команды для вызова из кнопки (пункта меню)
RegisterCommand 70001 "AutoBackdrop"
# запоминание текущего фона
RegisterCommand 70002 "BackColorBar"
# создание и отображение меню
RegisterCommand 70003 "ShowBackdropMenu"
# ключи секции [Color]
RegisterCommand 70004 "ColorItem" "Backdrop"
RegisterCommand 70005 "ColorItem" "MarkColor"
RegisterCommand 70006 "ColorItem" "CursorColor"
RegisterCommand 70007 "ColorItem" "ForeColor"
RegisterCommand 70008 "ColorItem" "CursorText"
RegisterCommand 70009 "ColorItem" "BackColor"
RegisterCommand 70010 "ColorItem" "BackColor2"
# ключи ColorFilter секции [Color]
RegisterCommand 70011 "ColorFilterItem" 1
RegisterCommand 70012 "ColorFilterItem" 2
RegisterCommand 70013 "ColorFilterItem" 3
RegisterCommand 70014 "ColorFilterItem" 4
RegisterCommand 70015 "ColorFilterItem" 5
RegisterCommand 70016 "ColorFilterItem" 6
RegisterCommand 70017 "ColorFilterItem" 7
RegisterCommand 70018 "ColorFilterItem" 8
RegisterCommand 70019 "ColorFilterItem" 9
RegisterCommand 70020 "ColorFilterItem" 10
RegisterCommand 70021 "ColorFilterItem" 11
RegisterCommand 70022 "ColorFilterItem" 12
RegisterCommand 70023 "ColorFilterItem" 13
RegisterCommand 70024 "ColorFilterItem" 14
RegisterCommand 70025 "ColorFilterItem" 15
# прием сообщения окну "установить значения фона"
SetMessageAction /P "BackColorsMessage" SetBackColors
# значения фона при старте ТС
if BackColor1 = 0 or BackColor2 = 0 then
IniRead /R BackColor1 %COMMANDER_INI% "Colors" "BackColor" -1
IniRead /R BackColor2 %COMMANDER_INI% "Colors" "BackColor2" -1
endif
Func InitialColors(lParam, lMode)
Local i = 0, cf, txt
If lMode = 1 Then
# вызов пункта меню для показа значений
OpenInTextEditor(CL_SNAP)
Return
Endif
# снимок первоначальных значений
CL_SNAP = ";значения секции при запуске ТС" & auCRLF
CL_SNAP = CL_SNAP & "[Colors]" & auCRLF
IniRead /R txt %COMMANDER_INI% "Colors" "ForeColor" -1
CL_SNAP = CL_SNAP & "ForeColor=" & txt & auCRLF
IniRead /R txt %COMMANDER_INI% "Colors" "BackColor" -1
CL_SNAP = CL_SNAP & "BackColor=" & txt & auCRLF
IniRead /R txt %COMMANDER_INI% "Colors" "BackColor2" -1
CL_SNAP = CL_SNAP & "BackColor2=" & txt & auCRLF
IniRead /R txt %COMMANDER_INI% "Colors" "MarkColor" -1
CL_SNAP = CL_SNAP & "MarkColor=" & txt & auCRLF
IniRead /R txt %COMMANDER_INI% "Colors" "CursorColor" -1
CL_SNAP = CL_SNAP & "CursorColor=" & txt & auCRLF
IniRead /R txt %COMMANDER_INI% "Colors" "CursorText" -1
CL_SNAP = CL_SNAP & "CursorText=" & txt & auCRLF
While i < 100
i = i + 1
IniRead /R cf %COMMANDER_INI% "Colors" %"'ColorFilter' & %i%" "stop"
If cf="stop" Then Break
IniRead /R txt %COMMANDER_INI% "Colors" %"'ColorFilter' & %i% & 'Color'"
CL_SNAP = CL_SNAP & cf & "=" & txt & auCRLF
Wend
EndFunc
Func AutoBackdrop(lParam)
Static StartCount = 0
# удержание Ctrl+Shift
# повышение тона на одну единицу после нажатия
# на кнопку, выбора пункта меню или вызова другим способом
If IsPressed (0x10) And IsPressed (0x11) Then Return SetBackGround(1)
# удержание Ctrl
# понижние тона на одну единицу
If IsPressed (0x11) Then Return SetBackGround(2)
# удержание Alt+Win
# вернуть предыдущий фон
If IsPressed (0x12) And IsPressed (0x5B) Then
if Previous1 > 0 or Previous2 > 0 then WriteBackground(Previous1, Previous2)
Return
endif
# удержание Alt+Shift
# скопировать в буфер код кнопки текущего фона
If IsPressed (0x12) And IsPressed (0x10) Then
IniRead /R bkg1 %COMMANDER_INI% "Colors" "BackColor" -1
IniRead /R bkg2 %COMMANDER_INI% "Colors" "BackColor2" -1
ClipPut("TOTALCMD#BAR#DATA" & auCRLF & CL_TCFS2 & auCRLF & _
"/u- /ef ""msg(regmsg(BackColorsMessage), " & bkg1 & ", " & bkg2 & ")""" & auCRLF & "%COMMANDER_EXE%")
ShowBackHint("Кнопка с фоном скопирована")
Return
Endif
# удержание Alt
# вернуть первоначальный фон TC
If IsPressed (0x12) Then Return WriteBackground(BackColor1, BackColor2)
# удержание Shift
# показ текущих значений фона
If IsPressed (0x10) Then Return ShowBackColor()
# поток уже запущен
if BACKDROP_THREAD > 0 then
BACKDROP_THREAD = 0
else
If StartCount = 0 Then InitialColors(0, 0)
BACKDROP_THREAD = 1
# при старте парное значение фона по умолчанию
ColorItem(1, "Backdrop")
RunThread ThreadBackdrop
StartCount = StartCount + 1
SetHintParam("ShowHint", "Font", 10, "Tahoma")
SetHintParam("ShowHint", "BackColor", 0x001C1C1C)
SetHintParam("ShowHint", "Text", 0xFFFFFF)
#SetHintParam("ShowHint", "Frame", 0xFFFFFF)
ShowHint("Отслеживание значений запущено." & auLF & "Значения в ColorMania / буфере будут применятся к фону панелей.")
Sleep(2000)
WinSetState(23)
SetHintParam("ShowHint", "Reload")
endif
EndFunc
# прием сообщения
Func SetBackColors(hWnd, uMsg, wParam, lParam)
WriteBackground(wParam, lParam)
EndFunc
# запись парных значений
Func WriteBackground(Color1, Color2)
IniWrite /R %COMMANDER_INI% "Colors" "BackColor" %Color1%
IniWrite /R %COMMANDER_INI% "Colors" "BackColor2" %Color2%
# обновление панелей
SendCommand 2957
SendCommand 2957
EndFunc
# запись одиночных значений
Func WriteSingleColor(KeyName, KeyValue)
IniWrite /R %COMMANDER_INI% "Colors" %"%KeyName%" %KeyValue%
SendCommand 2957
SendCommand 2957
EndFunc
# функция работает в отдельном потоке
Func ThreadBackdrop()
Local h = 0, max = 1*255 + 256*255 + 65536*255, clip, last = 0, w = 0, source
# предыдущие значения фона
IniRead /R Previous1 %COMMANDER_INI% "Colors" "BackColor" -1
IniRead /R Previous2 %COMMANDER_INI% "Colors" "BackColor2" -1
While BACKDROP_THREAD = 1
h = WinFind(0, "TfrmColorPick")
if h > 0 and IsPressed (0x11) then
# текст из ColorMania
# при зажатом CTRL
clip = WinGetText(WinFind(h, "TEdit", 1))
source = "ColorMania"
else
# первая строка в буфере
clip = StrPart(ClipGet(), auLF, 1)
source = "Clipboard"
endif
if IsInt(clip) then
# новое число в диапазоне
if clip >= 0 and clip <= max and not (clip = last) then
WinSetText("Applying color value: " & clip)
If WRITE_COLOR_MODE = 0 Then
WriteBackground(clip, clip)
Else
WriteSingleColor(CL_KEY, clip)
Endif
w = w + 1
last = clip
Sleep(400)
endif
endif
Sleep(250)
WinSetText("Backdrop thread is watching for " & source & " values for " & CF_NAME & "")
Wend
BACKDROP_THREAD = 0
WinSetText("")
SetHintParam("ShowHint", "Font", 10, "Tahoma")
SetHintParam("ShowHint", "BackColor", 0x001C1C1C)
SetHintParam("ShowHint", "Text", 0xFFFFFF)
ShowHint("Отслеживание остановлено" & auLF & "Применений фона: " & w)
Sleep(2000)
WinSetState(23)
SetHintParam("ShowHint", "Reload")
EndFunc
Func SetBackGround(nParam)
Local bkg1, bkg2, max = 1*255 + 256*255 + 65536*255
# при автоизменении потолок чуть меньше
# попытка предотвратить переход в серые тона
if Pulsar = 1 then max = 1*245 + 256*245 + 65536*245
IniRead /R bkg1 %COMMANDER_INI% "Colors" "BackColor" -1
IniRead /R bkg2 %COMMANDER_INI% "Colors" "BackColor2" -1
If Not IsInt(bkg1) Or Not IsInt(bkg2) Then
MsgBox("Нечисловые значения цвета фона: " _
& auLF & auLF & "BackColor=" & bkg1 & auLF & "BackColor2=" & bkg2 _
& auLF & auLF & "ESC - Отмена операции")
Return
Endif
if bkg1 = -1 then bkg1 = max
if bkg2 = -1 then bkg2 = max
if nParam = 1 then
bkg1 = bkg1 + 1 + 256 + 65536
bkg2 = bkg2 + 1 + 256 + 65536
else
bkg1 = bkg1 - 1 - 256 - 65536
bkg2 = bkg2 - 1 - 256 - 65536
endif
if bkg1 > max then bkg1 = bkg1 - 1 - 256 - 65536
if bkg2 > max then bkg2 = bkg2 - 1 - 256 - 65536
if bkg1 < -1 then bkg1 = max
if bkg2 < -1 then bkg2 = max
WriteBackground(bkg1, bkg2)
EndFunc
Func SetPulsar(nParam)
local a, b, s, l
static t = 0
if Pulsar = 1 then
Pulsar = 0
Return
endif
Pulsar = 1
if nParam = 1 then
a = 1
b = 2
s = 1
else
a = 2
b = 1
s = -1
endif
IniRead /R Previous1 %COMMANDER_INI% "Colors" "BackColor" -1
IniRead /R Previous2 %COMMANDER_INI% "Colors" "BackColor2" -1
While Pulsar = 1
For j = a To b step s
For i = 1 To 75
SetBackGround(j)
# значение можно увеличить
# если мерцает только одна панель
Sleep(25)
l = l + 1
t = t + 1
if Pulsar = 0 then Break
If IsPressed (0x1B) Then
Pulsar = 0
Break
Endif
Next
if Pulsar = 0 then Break
Next
Wend
# показать статистику, если выход по ESC
If IsPressed (0x1B) Then
ShowHint("Изменений тонов: " & l & auCRLF & "Всего изменений: " & t)
Endif
EndFunc
Func ShowBackColor(lDelay = 300)
Local txt, bkg1, bkg2, max = 1*255 + 256*255 + 65536*255
IniRead /R bkg1 %COMMANDER_INI% "Colors" "BackColor" -1
IniRead /R bkg2 %COMMANDER_INI% "Colors" "BackColor2" -1
if bkg1 = -1 then bkg1 = max
if bkg2 = -1 then bkg2 = max
# обратный расчет
blue = floor(bkg1/65536)
green = bkg1 - (blue * 65536)
green = floor(green/256)
red = bkg1 - (blue * 65536) - (green * 256)
txt = "Фон 1" & auLF & "Красный: " & red & auLF & "Зелёный: " & green & auLF & "Синий: " & blue & auLF & "Значение: " & bkg1
txt = txt & auLF & "" & auLF
blue = floor(bkg2/65536)
green = bkg2 - (blue * 65536)
green = floor(green/256)
red = bkg2 - (blue * 65536) - (green * 256)
txt = txt & "Фон 2" & auLF & "Красный: " & red & auLF & "Зелёный: " & green & auLF & "Синий: " & blue & auLF & "Значение: " & bkg2
ShowHint(txt)
EndFunc
Func BackColorBar(lParam)
Local i, bkg1, bkg2, bar = CL_BAR
If Not FileExist(bar) Then
MsgBox("Файл не существует " & bar, "Backdrop")
Return
Endif
IniRead i %bar% "Buttonbar" "Buttoncount" 0
If Not IsInt(i) or i < 1 Then
MsgBox("Ошибка Buttoncount < 1 " & auCRLF & bar, "Backdrop")
Return
Endif
IniRead /R bkg1 %COMMANDER_INI% "Colors" "BackColor" -1
IniRead /R bkg2 %COMMANDER_INI% "Colors" "BackColor2" -1
i = i + 1
IniWrite /EV- %bar% "Buttonbar" %"'Button' & %i%" "%COMMANDER_EXE%"
IniWrite %bar% "Buttonbar" %"'Cmd' & %i%" "%CL_TCFS2%"
IniWrite %bar% "Buttonbar" %"'Param' & %i%" '"/u- /ef "msg(regmsg(BackColorsMessage), %bkg1%, %bkg2%)"'
IniWrite %bar% "Buttonbar" %"'Menu' & %i%" "Фон %bkg1%, %bkg2%"
IniWrite %bar% "Buttonbar" "Buttoncount" %i%
ShowBackHint("Фон панелей сохранен")
EndFunc
Func ShowBackHint(BackHint, PosX = false)
SetHintParam("ShowHint", "Font", 10, "Arial")
SetHintParam("ShowHint", "BackColor", 0x001C1C1C)
SetHintParam("ShowHint", "Text", 0xFFFFFF)
If PosX Then
ShowHint(BackHint, CL_MousePosX, CL_MousePosY)
Else
ShowHint(BackHint)
Endif
Sleep(1000)
WinSetState(23)
SetHintParam("ShowHint", "Reload")
EndFunc
Func CreateBackdropMenu()
Local i = 0, cf, txt
txt = txt & 'MENUITEM "Фон\tBackdrop", 70004' & auCRLF
txt = txt & 'MENUITEM SEPARATOR' & auCRLF
txt = txt & 'MENUITEM "Выделение\tMarkColor", 70005' & auCRLF
txt = txt & 'MENUITEM "Курсор\tCursorColor", 70006' & auCRLF
txt = txt & 'MENUITEM "Текст\tForeColor", 70007' & auCRLF
txt = txt & 'MENUITEM "Текст под курсором\tCursorText", 70008' & auCRLF
txt = txt & 'MENUITEM "Фон 1\tBackColor", 70009' & auCRLF
txt = txt & 'MENUITEM "Фон 2\tBackColor2", 70010' & auCRLF
txt = txt & 'MENUITEM SEPARATOR' & auCRLF
While i < 100
i = i + 1
IniRead /R cf %COMMANDER_INI% "Colors" %"'ColorFilter' & %i%" "stop"
If cf="stop" Then Break
txt = txt & 'MENUITEM "' & cf & '", 700' & 10+i & auCRLF
Wend
txt = txt & 'MENUITEM SEPARATOR' & auCRLF
txt = txt & 'MENUITEM "Первоначальные значения секции [Colors]", 70000'
Return txt
EndFunc
Func ShowBackdropMenu(lParam)
# координаты кнопки вызова меню
MouseGetPos("CL_MousePosX", "CL_MousePosY")
ShowPopupMenu /D /F "CreateBackdropMenu"
EndFunc
Func ColorFilterItem(lParam, wItem)
Local key1, key2, val1, val2
If BACKDROP_THREAD = 0 Then
ShowHint("Отслеживание цвета не запущено")
Return
Endif
key1 = "ColorFilter" & wItem
key2 = key1 & "Color"
IniRead /R val1 %COMMANDER_INI% "Colors" %"%key1%" ""
IniRead /R val2 %COMMANDER_INI% "Colors" %"%key2%" ""
# формат "ColorFilter1"
CF_KEY = key1
# формат "ColorFilter1Color"
CF_COLOR_KEY = key2
# формат "Имя фильтра", например "Autorun"
CF_NAME = val1
# формат "Цвет фильтра", например "65535"
CF_VALUE = val2
# глобальные значения для потока
CL_KEY = CF_COLOR_KEY
CL_VALUE = CF_VALUE
# режим записи "Одиночный ключ"
WRITE_COLOR_MODE = 1
ColorItemChange(CL_VALUE)
ShowBackHint("Цвет типа выбран" & auCR & "Значения будут применятся к " & CF_NAME, false)
EndFunc
Func ColorItem(lParam, sItem)
Local key, val
If BACKDROP_THREAD = 0 Then
ShowHint("Отслеживание цвета не запущено")
Return
Endif
# парный однотонный фон BackColor = BackColor2
If sItem = "Backdrop" Then
# режим записи "Парный ключ"
WRITE_COLOR_MODE = 0
# Имя для потока
CF_NAME = "Backdrop"
IniRead /R val %COMMANDER_INI% "Colors" "BackColor" -1
ClipPut(val)
# запуск из меню
If lParam = 0 Then
ShowBackHint("Цвет типа выбран" & auCR & "Значения будут применятся к Backdrop")
Endif
Return
Endif
key = sItem
IniRead /R val %COMMANDER_INI% "Colors" %"%key%" ""
# глобальные значения для потока
CL_KEY = key
CL_VALUE = val
CF_NAME = key
WRITE_COLOR_MODE = 1
ColorItemChange(CL_VALUE)
ShowBackHint("Цвет типа выбран" & auCR & "Значения будут применятся к " & key, false)
EndFunc
# не применять изменения цвета при смене элемента
Func ColorItemChange(ColorText)
Local h
# очистка буфера при смене элемента
ClipPut(ColorText)
h = WinFind(0, "TfrmColorPick")
if h > 0 then
# синхронизация текста
WinSetText(ColorText, WinFind(h, "TEdit", 1))
endif
EndFunc
Func OpenInTextEditor(Text)
Local h = 0
ClipPut(Text)
h = WinFind(0, "AkelPad4")
If h > 0 Then
ShellExec /SW_SHOWNORMAL %CL_AKEL4% '/Command(4101) /Command(4155)'
Return
Endif
If Not FileExist(CL_AKEL4) Then
ShowHint("AkelPad не найден " & CL_AKEL4 & "Текст значений скопирован в буфер.")
Else
ShellExec /SW_SHOWNORMAL %CL_AKEL4% ' /Command(4155)'
Endif
EndFuncНа панели должно быть две кнопки: одна - для запуска отслеживания, другая - для выбора элемента из меню.
[cut]
Код: Выделить всё
TOTALCMD#BAR#DATA
70001
%COMMANDER_EXE%
Запустить/Остановить|Отслеживание цвета в буфере| |Ctrl - Понижение тонов|Ctrl+Shift - Повышение тонов|Alt - Вернуть первоначальный|Alt+Win - Вернуть предыдущий| |Shift - Показать значения|Alt+Shift - Скопировать в буфер
0
70001
[cut]
Код: Выделить всё
TOTALCMD#BAR#DATA
70003
%COMMANDER_EXE%
Выбор цвета для остлеживания в буфере
70003
Клавиши-модификаторы для первой кнопки указаны в ее подсказке. При нажатии на первую кнопку запускается процесс слежения за буфером (проверка буфера 4 раза в секунду). Если в буфере находится десятичное число, оно применяется к цвету активного элемента, выбранного для слежения (этот элемент можно выбрать из меню второй кнопки). По-умолчанию при запуске первым элементом для отслеживания становится сам фон панелей, т.е. два его значения (фон1 и фон2), которые при равенстве делают фон однотонным. Чтобы пользоваться с комфортом, понадобится утилита ColorMania, в которой необходимо выбрать формат цвета "Powerbuilder". При удержании CTRL значения из ColorMania применяются к настройкам ТС в реальном времени. При отпускании CTRL - значения снова берутся из буфера. Это дает возможность примеривать цвета из ColorMania на лету оценивая результат, который не применится до тех пор, пока не будет нажата кнопка "Copy", копирующая значение ColorMania в буфер. Если что-то пойдет не так, есть пункт "Первоначальные значения секции [Colors]", который откроет редактор со значениями цветов, установленных во время запуска ТС. Можно просто скопировать в буфер нужно значение, и оно снова применится к настройкам.
Для удобства сохранения цветов фона есть отдельная панель, которую можно использовать в виде меню как третью кнопку. На панеле есть команда "Сохранить фон", которая, соответственно, сохраняет текущий фон панели и добавляет его к самой себе. Пример такой панели:
[cut="Backdrops.bar"]
Код: Выделить всё
[Buttonbar]
Buttoncount=11
button1=wcmicons.dll,15
cmd1=%COMMANDER_PATH%\Bars\Main.bar
iconic1=0
button2=%COMMANDER_EXE%
cmd2=70002
iconic2=0
menu2=Сохранить фон
button3=
iconic3=0
button4=%COMMANDER_EXE%
cmd4=%COMMANDER_PATH%\Utilites\TCFS2\TCFS2.exe
param4=/u- /ef "msg(regmsg(BackColorsMessage), 8158332, 8158332)
iconic4=0
menu4=Избранный фон 1
button5=%COMMANDER_EXE%
cmd5=%COMMANDER_PATH%\Utilites\TCFS2\TCFS2.exe
param5=/u- /ef "msg(regmsg(BackColorsMessage), 9272934, 9272934)
iconic5=0
menu5=Избранный фон 2
button6=
iconic6=0
button7=%COMMANDER_EXE%
cmd7=%COMMANDER_PATH%\Utilites\TCFS2\TCFS2.exe
param7=/u- /ef "msg(regmsg(BackColorsMessage), 9211020, 9211020)
iconic7=0
menu7=Фон 9211020, 9211020
button8=%COMMANDER_EXE%
cmd8=%COMMANDER_PATH%\Utilites\TCFS2\TCFS2.exe
param8=/u- /ef "msg(regmsg(BackColorsMessage), 8421230, 8421230)
iconic8=0
menu8=Фон 8421230, 8421230
button9=%COMMANDER_EXE%
cmd9=%COMMANDER_PATH%\Utilites\TCFS2\TCFS2.exe
param9=/u- /ef "msg(regmsg(BackColorsMessage), 9865603, 9865603)
iconic9=0
menu9=Фон 9865603, 9865603
Button10=%COMMANDER_EXE%
Cmd10=%COMMANDER_PATH%\Utilites\TCFS2\TCFS2.exe
Param10="/u- /ef "msg(regmsg(BackColorsMessage), 6316128, 6316128)"
Menu10=Фон 6316128, 6316128
Button11=%COMMANDER_EXE%
Cmd11=%COMMANDER_PATH%\Utilites\TCFS2\TCFS2.exe
Param11="/u- /ef "msg(regmsg(BackColorsMessage), 7497811, 7497811)"
Menu11=Фон 7497811, 7497811
Чтобы все заработало, необходимо указать корректные пути к этой панели, утилите TCFS2 и AkelPad, которые, конечно, могут и будут отличаться от ваших. Делается это в заголовке (начале) файла Backdrop.aucfg.
Ну вот и все. Пользуйтесь на здоровье! )
[cut="Disclaimer"]Разработка не призвана полностью заменить встроенный функционал ТС. За порчу ваших цветов я не отвечаю
И правда, удобно!Orion9 писал(а):Зажимаешь Ctrl - фон из ColorMania, отпускаешь - из буфера.
На первый взгляд всё работает.
Может, имеет смысл отлавливать в буфере значение -1 для возврата к стандартному цвету?
При выборе цвета для курсора надо не забыть отключить в настройках "Системный стиль для курсора" (у кого используется).
Хорошая идеяsa писал(а):Может, имеет смысл отлавливать в буфере значение -1 для возврата к стандартному цвету?
Код: Выделить всё
if clip >= 0 and clip <= max and not (clip = last) thenКод: Выделить всё
Func SetDefaultColor()
if BACKDROP_THREAD > 0 then
ClipPut("-1")
ShowBackHint("Установлен цвет по-умолчанию для " & CF_NAME)
else
ShowHint("Отслеживание цвета не запущено")
endif
EndFuncПрошло больше суток, как отключил WinScriptAdv, падений ТС больше пока не было. Но еще рано делать выводы, хотя, может быть, проблема была как-то связана с ним или даже тем багом в коде с установкой глобальной переменной некорректного значения, который заметил sa. Я сейчас посмотрю, к чему это могло привести, вполне возможно, что дело было как раз в этом.
Я предполагал копировать "-1" ручками из AkelPad с первоначальными значениями секции [Colors]: у меня там много их набирается.Orion9 писал(а):Само значение можно посылать в бУфер по-разному
Последний раз редактировалось sa Пт ноя 22, 2024 18:55, всего редактировалось 1 раз.
sa
Теперь понял, кажется ) Да, поэтому и пришлось сделать снимок секции перед первым запуском потока. Поначалу значения из ColorMania сразу применялись к настройкам ТС, из-за чего можно было легко накосячить, но трудно вернуть назад
Сейчас значения не применяются, пока не попадут в буфер, поэтому запуск потока не так опасен - по сути он просто крутится вхолостую, если в буфере нет необходимых значений.
Loopback
Отследить и воспроизвести ошибку оказалось не так просто. Я просто подумал, что команда:
Меняла содержимое переменной, которая была завязана на ShellExecute и установку переменной окружения через SetEnv, которая, в свою очередь, была завязана на посылку сообщений окну ТС . Все это могло привести в последствии к неожиданным ошибкам, но поймать мне ничего не удалось. Ладно, посмотрим, что будет дальше.
Пара пожеланий. Помню, мы говорили, что неплохо было бы Autorun иметь собственное меню типа ShowPopup, которым можно было бы управлять по своему усмотрению, в частности напрямую вызывать внутренние и пользовательские функции с параметрами и т.п. Сейчас вызов через зарегистрированные коды стал удобнее, но есть ли в планах реализовать независимую функцию меню, не привязанную к формату mnu-файлов?
Уже не первый раз замечаю потребность напрямую создавать пустой файл из Autorun и писать в него что-нибудь. Возможно, сейчас и можно этого добиться через буфер и cmd, но хотелось бы иметь такую файловую функцию
Теперь понял, кажется ) Да, поэтому и пришлось сделать снимок секции перед первым запуском потока. Поначалу значения из ColorMania сразу применялись к настройкам ТС, из-за чего можно было легко накосячить, но трудно вернуть назад
Loopback
Отследить и воспроизвести ошибку оказалось не так просто. Я просто подумал, что команда:
Код: Выделить всё
Set /EV- TCFS2 "%COMMANDER_PATH%\Utilites\TCFS2\TCFS2.exe"Пара пожеланий. Помню, мы говорили, что неплохо было бы Autorun иметь собственное меню типа ShowPopup, которым можно было бы управлять по своему усмотрению, в частности напрямую вызывать внутренние и пользовательские функции с параметрами и т.п. Сейчас вызов через зарегистрированные коды стал удобнее, но есть ли в планах реализовать независимую функцию меню, не привязанную к формату mnu-файлов?
Уже не первый раз замечаю потребность напрямую создавать пустой файл из Autorun и писать в него что-нибудь. Возможно, сейчас и можно этого добиться через буфер и cmd, но хотелось бы иметь такую файловую функцию
Если это связано с Autorun, то учитывая что падение происходило в неактивном окне, искать скорее всего нужно в коде, который в фоне и выполняется. Т.е. в каком-то цикле, либо в функции RunThread, либо в основном скрипте.Orion9 писал(а):Отследить и воспроизвести ошибку оказалось не так просто.
Вроде что-то было, хотя точно не помню. Думаю не стоит рассчитывать на реализацию в скором будущем. Слишком много работы ради минимального профита, причём связанного исключительно с удобством. Есть поддержка bar, из которого можно вызвать зарегистрированную команду, и менять его можно быстро прямо средствами тотала.Orion9 писал(а):Помню, мы говорили, что неплохо было бы Autorun иметь собственное меню типа ShowPopup, которым можно было бы управлять по своему усмотрению, в частности напрямую вызывать внутренние и пользовательские функции с параметрами и т.п. Сейчас вызов через зарегистрированные коды стал удобнее, но есть ли в планах реализовать независимую функцию меню, не привязанную к формату mnu-файлов?
Всё в планах, но когда дойдет до реализации не знаю.Orion9 писал(а): потребность напрямую создавать пустой файл из Autorun
Loopback
До меня только потом дошло, что там же еще двойная косая черта была, т.ч. тест мой был неполноценным. Ну и ладно. Уже два дня работает без проблем, а там видно будет. Просто не хочу сейчас еще раз заморачиваться, но вполне возможно причиной всему была вот эта строчка:
Эта переменная ипользовалась для установки переменных окружения и вызова в ShellExec. На нее были также завязаны и пользовательские команды из usercmd.ini, которые как раз и могли вызываться в фоне. Короче, фиг с ним. Впредь надо быть осторожнее
До меня только потом дошло, что там же еще двойная косая черта была, т.ч. тест мой был неполноценным. Ну и ладно. Уже два дня работает без проблем, а там видно будет. Просто не хочу сейчас еще раз заморачиваться, но вполне возможно причиной всему была вот эта строчка:
Код: Выделить всё
Set /EV- tcfs2 "%COMMANDER_PATH%\\Utilites\TCFS2\TCFS2.exe"Иногда требуется создать меню динамически, когда не известно, что именно будет внутри и в каком количестве. Помимо этого через бар-файл можно послать сообщение лишь с двумя параметрами, да и вообще это не всегда удобно и только создает лишние цепочки. Хотелось бы из меню сразу вызывать функции, объявленные в Autorun, с любым количеством параметров и возможностью влиять на состояние самих пунктов меню - включен, выключен, доступен, недоступен, а также значки, если можно )Слишком много работы ради минимального профита, причём связанного исключительно с удобством. Есть поддержка bar, из которого можно вызвать зарегистрированную команду, и менять его можно быстро прямо средствами тотала.
Loopback
При вызове GetState в конце остается двойной перевод строки. Можно, конечно, убрать его средстави скрипта, но хотелось бы, чтобы сразу все возвращалось как надо.
Остановился пока на таком варианте кнопки "Autorun". Правый клик висит пока временно, как и многое остальное. Но уже неплохо и довольно удобно. Правда RestartScript мне таким образом не удалось заставить работать, но с ним я мало эксперементировал.
[cut][/cut]
Попутно обновил код кнопки "MediaInfo & AkelPad". Есть пара интересных моментов (может, кому-то пригодится в своих целях):
[cut][/cut]
Прикольное сочетание Alt+Ctrl+Shift. В следующий раз добавлю еще клавишу Win
При вызове GetState в конце остается двойной перевод строки. Можно, конечно, убрать его средстави скрипта, но хотелось бы, чтобы сразу все возвращалось как надо.
Остановился пока на таком варианте кнопки "Autorun". Правый клик висит пока временно, как и многое остальное. Но уже неплохо и довольно удобно. Правда RestartScript мне таким образом не удалось заставить работать, но с ним я мало эксперементировал.
[cut]
Код: Выделить всё
RegisterCommand 77000 "AutorunStatus"
ControlSetMouseAction /L /B:7 17 AutorunStatus 0
ControlSetMouseAction /R /B:7 17 AutorunStatus 1
Func AutorunStatus(lParam)
Local vars, h = 0
Local dbgv = %COMMANDER_PATH% & "\Utilites\Sysinternals\Dbgview.exe"
Static t = 0, t1
#If IsPressed (0x11) Then Return RestartScript(1000)
vars = GetState("vars")
If lParam = 1 Then
ClipPut(vars)
ShowHint("Информация скопирована в буфер")
Sleep(100)
h = WinFind(0, "AkelPad4")
If h > 0 Then
ShellExec /SW_SHOWNORMAL %AKELP% '/Command(4101) /Command(4155) /Call("Scripts::Main", 1, "GoHome.vbs")'
Else
ShellExec /SW_SHOWNORMAL %AKELP% '/Command(4155) /Call("Scripts::Main", 1, "GoHome.vbs")'
Endif
Return
Endif
t = t + 1
# второй вызов функции менее,
# чем за 300 млс. (второй клик)
If t > 1 And (GetUptime() - t1) < 300 Then
t = 0
If Not WinFind(0, "dbgviewClass") Then
If Not FileExist(dbgv) Then
ShowHint("Файл не найден " & dbgv)
Return
Endif
ShellExec /SW_SHOWNORMAL %dbgv%
Sleep(100)
Endif
For i = 1 To 3
If WinFind(0, "dbgviewClass") Then
OutputDebugString(vars)
break
Endif
Sleep(150)
Next
Return
Endif
h = WinFind(0, "dbgviewClass")
If h > 0 Then
OutputDebugString(vars)
WinSetState(23, h)
Else
ShowHint("Просмотрщик DebugView не запущен")
# Sleep(500)
# WinSetState(23)
Endif
# первый клик (вызов функции)
t1 = GetUptime()
EndFunc
ControlSetHint /F /D:50 /B:7 17 "AutorunHints"
Func AutorunHints()
Local A_Version, A_Copyright, A_DateTime, A_Wdx = AUTORUN_PATH & "\Autorun.wdx"
If IsPressed (0x10) Then Return GetState("libs")
If IsPressed (0x11) Then Return GetState("threads") & auCR & GetState("procs")
If IsPressed (0x12) Then Return GetState("paths")
A_Version = FileGetVersion(A_Wdx, "FileVersion")
A_Copyright = FileGetVersion(A_Wdx, "LegalCopyright")
obj = Plugin("FileDateTime")
If ERROR = 0 Then
obj.FileName = A_Wdx
A_DateTime = StrFormat("%.0f", obj.GetValue(3))
Free(obj)
Else
A_DateTime = "Error " & ERROR
Endif
Return "Версия: " & A_Version & auCR & "Дата изменения: " & A_DateTime & auCR & "Авторские права: " & A_Copyright
EndFuncПопутно обновил код кнопки "MediaInfo & AkelPad". Есть пара интересных моментов (может, кому-то пригодится в своих целях):
[cut]
Код: Выделить всё
Func GetMediaInfo(lParam)
Local sPath, sName, sFile, sAkel, sMI, pMI, txt, sTemp
Local sComplete, sLanguage, sLogFie, sParams
# lParam = 0 - использовать временный файл
# lParam = 1 - использовать вставку из буфера
# ALT - смена состояния lParam
# CTRL - полная информация
# SHIFT - русский перевод полей и единиц
sMI = %COMMANDER_PATH% & "\Plugins\arc\MediaInfo\MediaInfo.exe"
pMI = %COMMANDER_PATH% & "\Plugins\arc\MediaInfo\"
sAkel = %COMMANDER_PATH% & "\Utilites\AkelPad\AkelPad.exe"
sPath = RequestCopyDataInfo("SP")
sName = RequestCopyDataInfo("SN")
sFile = sPath & sName
sTemp = %TEMP% & "\" & StrFormat("07%d", Random(1, 100000, 1)) & ".txt"
If Not FileExist(sFile) Then
ShowHint("Файл не существует " & sFile)
Return
Endif
If StrPos(FileGetAttr(sFile), "D") Then
ShowHint("Каталог")
Return
Endif
If IsPressed (0x11) Then
sComplete = " --Complete=1"
Else
sComplete = " --Complete=0"
Endif
If IsPressed (0x10) Then
sLanguage = " --Language=file://ru.csv"
Else
sLanguage = ""
Endif
If IsPressed (0x12) Then
sLogFie = ' --LogFile="' & sTemp & '"'
lParam = 0
Else
sLogFie = ''
lParam = 1
Endif
sParams = sLanguage & sComplete & sLogFie & ' "' & sFile & '"'
ProcessExecGetOutput /C:65001 txt %sMI% %sParams% %pMI%
#OutputDebugString(GetState('vars',2))
If lParam = 1 Then
ClipPut(txt)
h = WinFind(0, "AkelPad4")
If h > 0 Then
ShellExec /SW_SHOWNORMAL %sAkel% '/Command(4101) /Command(4155) /Call("Scripts::Main", 1, "GoHome.vbs")'
Else
ShellExec /SW_SHOWNORMAL %sAkel% '/Command(4155) /Call("Scripts::Main", 1, "GoHome.vbs")'
Endif
Else
If txt = "" Then
ShowHint("Пустой stdout")
Return
Else
ShellExec /SW_SHOWNORMAL %sAkel% '%sTemp%'
Endif
Endif
Sleep(25)
For i = 1 To 3
h = WinFind(0, "AkelPad4")
If h > 0 Then
WinSetState(23, h)
break
Endif
Sleep(100)
Next
EndFunc
Прикольное сочетание Alt+Ctrl+Shift. В следующий раз добавлю еще клавишу Win
Вообще вряд ли что-то в Set может влиять, но кто знает.Orion9 писал(а): Эта переменная ипользовалась для установки переменных окружения и вызова в ShellExec.
А кстати, зачем её вообще использовать? Эта функция сейчас в некотором роде атавизм. Можно же просто записать:
Код: Выделить всё
tcfs2 = "%COMMANDER_PATH%\\Utilites\TCFS2\TCFS2.exe"
Это всё понятно. В принципе можно всё сильно упростить, если просто придумать кастомный формат меню и научить ShowPopupMenu его понимать. В любом случае значительно проще собрать структуру меню текстом (как сейчас можно собрать mnu-формат для передачи в ShowPopupMenu с переключателем /F), чем создавать поэлементно.Orion9 писал(а): Хотелось бы из меню сразу вызывать функции, объявленные в Autorun, с любым количеством параметров и возможностью влиять на состояние самих пунктов меню - включен, выключен, доступен, недоступен, а также значки, если можно )
В общем в todo добавил, но никаких сроков.
Ну да, прибавить при необходимости проще, чем отрезать. Уберу.Orion9 писал(а):При вызове GetState в конце остается двойной перевод строки. Можно, конечно, убрать его средстави скрипта, но хотелось бы, чтобы сразу все возвращалось как надо.
Loopback
Ну и зверя же вы сделали! Играться с ним можно бесконечно
Жаль, что в ближайшее время у меня не будет такой возможности, но оторваться и правда невозможно! )
И всё-таки я поймал рыбу своей мечты
[cut="autorun.cfg"][/cut]
[cut="[HintsCustomField]"][/cut]
Пришлось разбить на поля, поскольку юниты внутри поля оставляют пустоты. Заодно выяснил, что на один шаблон можно повесить только 30 полей. Но я думаю, больше и не надо, а то подсказка совсем за экран вылезет.
В общем, удержание Ctrl добавляет к подсказке данные из MediaInfo, а точнее первые 60 строк. Удержание Win+Ctrl добавляет с 50-ой строки. Нужна консольная утилита MediaInfo и последняя версия Autorun со всеми последними субплагинами. Результат мне очень понравился, хотя над форматом вывода еще можно работать и пробовать его улучшать.
https://www.autohotkey.com/docs/v2/lib/Menu.htm
Чисто визуально и по функционалу, а реализация все-равно от пользователя будет скрыта. Можно и тектом наполнять.
Забыл еще про GetState написать, что к библиотекам хотелось бы еще дату изменения файлов выводить. Не хватает, как мне показалось
Ну и зверя же вы сделали! Играться с ним можно бесконечно
И всё-таки я поймал рыбу своей мечты
[cut="autorun.cfg"]
Код: Выделить всё
Pragma AutorunPluginFields "C1:::BigHint" "C2:::BigHint" "C3:::BigHint" "C4:::BigHint" "C5:::BigHint" "C6:::BigHint" "C7:::BigHint" "C8:::BigHint" "C9:::BigHint" "C10:::BigHint" "C11:::BigHint" "C12:::BigHint" "C13:::BigHint" "C14:::BigHint" "C15:::BigHint" "C16:::BigHint" "C17:::BigHint" "C18:::BigHint" "C19:::BigHint" "C20:::BigHint" "C21:::BigHint" "C22:::BigHint" "C23:::BigHint" "C24:::BigHint" "C25:::BigHint" "C26:::BigHint" "C27:::BigHint" "C28:::BigHint" "C29:::BigHint" "C30:::BigHint" "C31:::BigHint" "C32:::BigHint" "C33:::BigHint" "C34:::BigHint" "C35:::BigHint" "C36:::BigHint" "C37:::BigHint" "C38:::BigHint" "C39:::BigHint" "C40:::BigHint" "C41:::BigHint" "C42:::BigHint" "C43:::BigHint" "C44:::BigHint" "C45:::BigHint" "C46:::BigHint" "C47:::BigHint" "C48:::BigHint" "C49:::BigHint" "C50:::BigHint" "C51:::BigHint" "C52:::BigHint" "C53:::BigHint" "C55:::BigHint" "C55:::BigHint" "C56:::BigHint" "C57:::BigHint" "C58:::BigHint" "C59:::BigHint" "C60:::BigHint"
Func BigHint(FileName, FieldIndex, UnitIndex)
Static idx = 0
Static pipe, c = 0, f = 0, _
sMI = %COMMANDER_PATH% & "\Plugins\arc\MediaInfo\MediaInfo.exe", _
pMI = %COMMANDER_PATH% & "\Plugins\arc\MediaInfo\"
If Not IsPressed (0x11) Then Return
#f = f + 1
If FieldIndex = 1 Then
idx = 0
ProcessExecGetOutput /C:65001 pipe %sMI% ' --Language=file://ru.csv "%FileName%"' %pMI%
If IsPressed (0x5B) Then
idx = 50
Endif
#c = c + 1
#OutputDebugString("Autorun: f = " & f & " c = " & c & "idx=" & idx)
Endif
Return TrimSpaces(StrPart(pipe, auLF, FieldIndex + idx))
EndFunc
Func TrimSpaces(String)
Local a, b
If Not StrPos(String, ":") Then Return String
a = StrPart(String, ":", 1)
b = StrPart(String, ":", 2)
Return StrTrim(a) & ": " & StrTrim(b)
EndFunc
[cut="[HintsCustomField]"]
Код: Выделить всё
22exts=*.*
22fields=[=autorun.C1]\n[=autorun.C2]\n[=autorun.C3]\n[=autorun.C4]\n[=autorun.C5]\n[=autorun.C6]\n[=autorun.C7]\n[=autorun.C8]\n[=autorun.C9]\n[=autorun.C10]\n[=autorun.C11]\n[=autorun.C12]\n[=autorun.C13]\n[=autorun.C14]\n[=autorun.C15]\n[=autorun.C16]\n[=autorun.C17]\n[=autorun.C18]\n[=autorun.C19]\n[=autorun.C20]\n[=autorun.C21]\n[=autorun.C22]\n[=autorun.C23]\n[=autorun.C24]\n[=autorun.C25]\n[=autorun.C26]\n[=autorun.C27]\n[=autorun.C28]\n[=autorun.C29]\n[=autorun.C30]
23exts=*.*
23fields=[=autorun.C31]\n[=autorun.C32]\n[=autorun.C33]\n[=autorun.C34]\n[=autorun.C35]\n[=autorun.C36]\n[=autorun.C37]\n[=autorun.C38]\n[=autorun.C39]\n[=autorun.C40]\n[=autorun.C41]\n[=autorun.C42]\n[=autorun.C43]\n[=autorun.C44]\n[=autorun.C45]\n[=autorun.C46]\n[=autorun.C47]\n[=autorun.C48]\n[=autorun.C49]\n[=autorun.C50]\n[=autorun.C51]\n[=autorun.C52]\n[=autorun.C53]\n[=autorun.C54]\n[=autorun.C55]\n[=autorun.C56]\n[=autorun.C57]\n[=autorun.C58]\n[=autorun.C59]\n[=autorun.C60]Пришлось разбить на поля, поскольку юниты внутри поля оставляют пустоты. Заодно выяснил, что на один шаблон можно повесить только 30 полей. Но я думаю, больше и не надо, а то подсказка совсем за экран вылезет.
В общем, удержание Ctrl добавляет к подсказке данные из MediaInfo, а точнее первые 60 строк. Удержание Win+Ctrl добавляет с 50-ой строки. Нужна консольная утилита MediaInfo и последняя версия Autorun со всеми последними субплагинами. Результат мне очень понравился, хотя над форматом вывода еще можно работать и пробовать его улучшать.
Да как-то упустил такое. А разве переменная не раскроется?А кстати, зачем её вообще использовать? Эта функция сейчас в некотором роде атавизм. Можно же просто записать:
Можно и отдельную функцию сделать с другим именем. В моем понимании меню должно быть примерно таким:В принципе можно всё сильно упростить, если просто придумать кастомный формат меню и научить ShowPopupMenu его понимать.
https://www.autohotkey.com/docs/v2/lib/Menu.htm
Чисто визуально и по функционалу, а реализация все-равно от пользователя будет скрыта. Можно и тектом наполнять.
Забыл еще про GetState написать, что к библиотекам хотелось бы еще дату изменения файлов выводить. Не хватает, как мне показалось
В смысле?Orion9 писал(а): поскольку юниты внутри поля оставляют пустоты
Еще и длина шаблона ограничена 1023 символами...Orion9 писал(а): Заодно выяснил, что на один шаблон можно повесить только 30 полей.
Нет, конечно. Это же просто строка.Orion9 писал(а):А разве переменная не раскроется?
В таком виде слишком много работы. Основное преимущество этого подхода - динамическое изменение элементов уже созданного меню, что для всплывающего меню не имеет смысла.Orion9 писал(а):В моем понимании меню должно быть примерно таким:
Не сказал бы, что это очень уж полезная информация для библиотеки. Тут скорее более полезной была бы дата сборки.Orion9 писал(а):к библиотекам хотелось бы еще дату изменения файлов выводить