Orion9

|
Posted: Mon Dec 16, 2024 01:14 Post subject: |
|
|
Придумал наконец-то, что можно повесить на правый клик у кнопки Autorun внизу окна.
Прав был jensoto - иногда нужно увидеть)
 Hidden text Code: | RegisterCommand 77001 "AutorunEnvars" 1
RegisterCommand 77002 "AutorunEnvars" 2
RegisterCommand 77003 "AutorunEnvars" 3
ControlSetMouseAction /R /B:7 17 AutorunMenu 0
ControlSetMouseAction /L /B:7 17 AutorunStatus 0
ControlSetMouseAction /L /K:C /B:7 17 AutorunStatus 1
Func AutorunMenu(lParam)
AutorunModules
ModuleMenu
EndFunc
Func AutorunEnvars(lParam, wParam)
Local Vars = (wParam = 2 ? GetState("envvars") : GetState("vars"))
If wParam < 3 Then
ClipPut(Vars)
Else
ClipPut(StrReplace(GetState("libs"), auLF & auCR, auCRLF))
EndIf
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
EndFunc
Func AutorunStatus(lParam)
Local vars, h = 0
Local dbgv = SysIntDir & "Dbgview.exe"
Static t = 0, t1
vars = (lParam = 1 ? GetState("envvars") : GetState("vars"))
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", txt
If IsPressed (0x10) Then Return GetState("libs")
If IsPressed (0x11) Then
txt = GetState("procs")
If StrLen(txt) > 0 Then txt = auCRLF & txt
Return GetState("threads") & txt
Endif
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
Global aModuleName = List()
RegisterCommand 77010 "ModuleMenuItem" 0
RegisterCommand 77011 "ModuleMenuItem" 1
RegisterCommand 77012 "ModuleMenuItem" 2
RegisterCommand 77013 "ModuleMenuItem" 3
RegisterCommand 77014 "ModuleMenuItem" 4
RegisterCommand 77015 "ModuleMenuItem" 5
RegisterCommand 77016 "ModuleMenuItem" 6
RegisterCommand 77017 "ModuleMenuItem" 7
RegisterCommand 77018 "ModuleMenuItem" 8
RegisterCommand 77019 "ModuleMenuItem" 9
RegisterCommand 77020 "ModuleMenuItem" 10
RegisterCommand 77021 "ModuleMenuItem" 11
RegisterCommand 77022 "ModuleMenuItem" 12
RegisterCommand 77023 "ModuleMenuItem" 13
RegisterCommand 77024 "ModuleMenuItem" 14
RegisterCommand 77025 "ModuleMenuItem" 15
RegisterCommand 77026 "ModuleMenuItem" 16
RegisterCommand 77027 "ModuleMenuItem" 17
RegisterCommand 77028 "ModuleMenuItem" 18
RegisterCommand 77029 "ModuleMenuItem" 19
Func AutorunModules()
Local p = GetState("paths"), j = 1, s
aModuleName.Count = 0
while 1
s = StrPart(p, auCRLF, j)
if ERROR = 1 then break
If StrPos(s , '#') And StrRight(s, 3) ="cfg" Then
s = StrPart(StrTrim(s), ": ", 2)
aModuleName.Add(s)
Endif
j += 1
wend
EndFunc
Func CreateModuleMenu()
Local i, txt, obj, lWdx = true, lines, sErr, name
obj = Plugin("LineBreakInfo.wdx")
If ERROR > 0 Then
lWdx = false
sErr = "ERROR #" & ERROR
Endif
For i = 0 To aModuleName.Count - 1
If lWdx Then
obj.FileName = aModuleName[i]
lines = obj.GetValue(5)
Else
lines = sErr
EndIf
name = StrTrim(StrRight(aModuleName[i], StrLen(aModuleName[i])-StrPos(aModuleName[i], "\", -1)))
#txt = txt & 'MENUITEM "' & StrReplace(aModuleName[i], %COMMANDER_PATH%, "") & '\t' & lines & '", 770' & 10+i & auCRLF
txt = txt & 'MENUITEM "' & name & '\t' & lines & '", 770' & 10+i & auCRLF
Next
txt = txt & 'MENUITEM SEPARATOR' & auCRLF
txt = txt & 'MENUITEM "Переменные окружения", 77002' & auCRLF
txt = txt & 'MENUITEM "Глобальные переменные", 77001' & auCRLF
txt = txt & 'MENUITEM "Информация о библиотеках", 77003' & auCRLF
txt = txt & 'MENUITEM SEPARATOR' & auCRLF
# txt = txt & 'MENUITEM "Справка...", 77000' & auCRLF
txt = txt & 'MENUITEM "Настройки...", 77000' & auCRLF
If lWdx Then Free(obj)
Return txt
EndFunc
Func ModuleMenu()
ShowPopupMenu /D /F "CreateModuleMenu"
EndFunc
Func ModuleMenuItem(lParam, nItem)
Local file, b_Ctrl = IsPressed(0x11)
If aModuleName.Count = 0 Then
ShowHint("Массив не содержит элементов")
Return
EndIf
If nItem < 0 Or nItem > aModuleName.Count Then
ShowHint("Выход за границы массива")
Return
EndIf
file = aModuleName[nItem]
If b_Ctrl Then
CommandExec /CD:S %file%
Else
ShellExec /SW_SHOWNORMAL %AKELP% ' %file%'
EndIf
EndFunc
|
А вот вам и хЫшный коммандер
Ну и смена фона:
 Backdrop.aucfg Code: | # Ctrl+Shift+"+" - Повышение тонов
# Ctrl+Shift+"-" - Понижение тонов
# Ctrl+"+" - Автоповышение тонов
# Ctrl+"-" - Автопонижение тонов
# ESC - Выход из автоперебора
# Alt+"+" - Показ текущих значений фона
# Alt+"-" - Показ текущих значений схемы
# Alt+Shift+"+" - Повышение одного тона
# Alt+Shift+"-" - Понижение одного тона
# Alt+Win+Click - Переключение цветовой схемы
# Alt+Click (Активная) - Переключение сохраненного фона
# Alt+Click (Неактивная) - Переключение предопределенного фона
# Alt+Shift+Click (Активная) - Переключение сохраненного фона (реверс)
Pragma IncludeOnce
Global Pulsar = 0, PulsarDelay = 50, 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, TEST_HINT = 0
# задержка автоперебора
IniRead /R PulsarDelay %COMMANDER_INI% "Autorun" "PulsarDelay" 50
# панель для сохранения фона
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 /K:S /V:187 /R /DM SetBackGround 1 1
SetHotkeyAction /K:A /K:S /V:189 /R /DM SetBackGround 2 1
# показать текущие значения
SetHotkeyAction /K:A /V:187 ShowBackColor 1000
SetHotkeyAction /K:A /V:189 SwitchColors 0
# 70000-700100
# первоначальные значения секции
# 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
RegisterCommand 70026 "ColorFilterItem" 16
RegisterCommand 70027 "ColorFilterItem" 17
RegisterCommand 70028 "ColorFilterItem" 18
RegisterCommand 70029 "ColorFilterItem" 19
RegisterCommand 70030 "ColorFilterItem" 20
RegisterCommand 70031 "ColorFilterItem" 21
RegisterCommand 70032 "ColorFilterItem" 22
RegisterCommand 70033 "ColorFilterItem" 23
RegisterCommand 70034 "ColorFilterItem" 24
RegisterCommand 70035 "ColorFilterItem" 25
RegisterCommand 70036 "ColorFilterItem" 26
RegisterCommand 70037 "ColorFilterItem" 27
RegisterCommand 70038 "ColorFilterItem" 28
RegisterCommand 70039 "ColorFilterItem" 29
RegisterCommand 70040 "ColorFilterItem" 30
# управление потоком
RegisterCommand 70050 "BackdropAction" 0
# прием сообщения окну "установить значения фона"
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 BackdropAction(lParam, lAction)
BACKDROP_THREAD = lAction
EndFunc
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
# удержание Win
# тестирование фона подсказки
If BACKDROP_THREAD = 0 And IsPressed (0x5B) Then TEST_HINT = 1
# удержание 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
If TEST_HINT = 1 Then
ShowHint("Режим TEST_HINT выключен")
TEST_HINT = 0
Sleep(700)
BACKDROP_THREAD = 0
Return
Endif
ShowPopupMenu /D /F "CreateBackdropMenu"
Else
tc = ProcessCount("TOTALCMD.EXE") + ProcessCount("TOTALCMD64.EXE")
If tc > 1 Then
ShowHint("Запущено " & tc & " процесса Total Commander" & auLF & _
"Для корректной работы требуется только одна копия TOTALCMD")
Return
EndIf
If StartCount = 0 Then InitialColors(0, 0)
BACKDROP_THREAD = 1
If TEST_HINT Then
CF_NAME = "HINT TEST MODE"
Else
# при старте парное значение фона по умолчанию
ColorItem(1, "Backdrop")
Endif
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:" & auLF & auLF & _
"CTRL - Применение цвета" & auLF & _
"SHIFT - откат, ALT - умолчание" & auLF & _
"ESC - синхронизация, WIN - буфер")
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 TestHintParam(ParamName, ParamValue, handle)
Local blue, green, red
blue = floor(ParamValue/65536)
green = ParamValue - (blue * 65536)
green = floor(green/256)
red = ParamValue - (blue * 65536) - (green * 256)
SetHintParam("ShowHint", ParamName, 1*blue + 256*green + 65536*red)
#SetHintParam("ShowHint", "Text", 0xFFFFFF)
ShowHint("Test text" & auCRLF & "Hex " & Hex(ParamValue, 6) & auCRLF & "Dec " & ParamValue & auLF & _
"Красный: " & red & auLF & "Зелёный: " & green & auLF & "Синий: " & blue)
Sleep(100)
SetHintParam("ShowHint", "Reload")
WinSetState(23, handle)
EndFunc
# функция работает в отдельном потоке
Func ThreadBackdrop()
Local h = 0, r, g, b, c, max = 1*255 + 256*255 + 65536*255, clip, last = -1, w = 0, v = 0, action, state
# предыдущие значения фона
IniRead /R Previous1 %COMMANDER_INI% "Colors" "BackColor" -1
IniRead /R Previous2 %COMMANDER_INI% "Colors" "BackColor2" -1
While BACKDROP_THREAD = 1
# поиск окна Color Dialog Box
h = WinFind(0, "#32770", "Цвет")
If h > 0 Then
action = "Color Dialog Box > "
If WinGetState(4, h) Then
action = action & "Active > "
r = WinGetText(WinFind(h, "Edit", 4))
g = WinGetText(WinFind(h, "Edit", 5))
b = WinGetText(WinFind(h, "Edit", 6))
# непустые поля редактирования
If Not (StrLen(r) = 0 And StrLen(g) = 0) Then
c = 1*r + 256*g + 65536*b
action = action & "Ready to apply RGB: " & r & ", " & g & ", " & b
Else
action = action & "RGB Unreachable"
EndIf
Endif
Else
# поиск окна ColorMania
h = WinFind(0, "TfrmColorPick")
If h > 0 Then
action = "ColorMania > "
If WinGetState(4, h) Then
action = action & "Active > "
c = WinGetText(WinFind(h, "TEdit", 1))
action = action & "Ready to apply value: " & c
Endif
EndIf
EndIf
If h > 0 And WinGetState(4, h) > 0 Then
If IsPressed (0x11) Then
# удержание CTRL
# значение активного окна
If StrLen(c) > 0 Then
clip = c
action = "Applying " & clip
Endif
ElseIf IsPressed (0x12) Then
# удержание ALT
# значение по умолчанию
clip = "-1"
action = "Applying -1"
ElseIf IsPressed (0x10) Then
# удержание SHIFT
# предыдущее значение
clip = CL_VALUE
action = "Undo " & clip
ElseIf IsPressed (0x5B) Then
# удержание WIN
# первая строка в буфере
clip = StrPart(ClipGet(), auLF, 1)
action = "Clipboard " & clip
ElseIf IsPressed (0x1B) Then
# удержание ESC
# синхронизация цвета в окне
# с изначальным цветом элемента
ColorSync(CL_VALUE)
action = "Color Sync " & clip
Endif
If CL_KEY = 'CursorColor' Or CL_KEY = 'CursorText' Then
If IsPressed (0x11) Or IsPressed (0x12) Or IsPressed (0x10) Or IsPressed (0x5B) Then WinSetState(23)
EndIf
ElseIf h > 0 And WinGetState(4, h) = 0 Then
action = action & "Not Active"
Else
action = "Waiting for a window..."
Endif
If IsInt(clip) Then
# новое число в диапазоне
If clip >= -1 And clip <= max And Not (clip = last) Then
If TEST_HINT = 1 Then
CF_NAME = "HINT TEST MODE"
WRITE_COLOR_MODE = 3
EndIf
If WRITE_COLOR_MODE = 0 Then
WriteBackground(clip, clip)
w = w + 1
ElseIf WRITE_COLOR_MODE = 1 Then
WriteSingleColor(CL_KEY, clip)
v = v + 1
Else
TestHintParam('BackColor', clip, h)
v = v + 1
Endif
last = clip
Sleep(100)
Endif
Endif
Sleep(250)
WinSetText("Changing colors > " & CF_NAME & " > " & action )
Wend
BACKDROP_THREAD = 0
WinSetText("")
WinRedraw
SetHintParam("ShowHint", "Font", 10, "Tahoma")
SetHintParam("ShowHint", "BackColor", 0x001C1C1C)
SetHintParam("ShowHint", "Text", 0xFFFFFF)
ShowHint("Отслеживание остановлено" & auLF & _
"Применений фона: " & w & auLF & _
"Применение других значений: " & v)
Sleep(2000)
WinSetState(23)
SetHintParam("ShowHint", "Reload")
EndFunc
Func SetBackGround(nParam, nZebra = 0)
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
If nZebra Then
WriteSingleColor("BackColor2", bkg2)
Else
WriteBackground(bkg1, bkg2)
Endif
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(PulsarDelay)
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 "Остановить отслеживание", 70050' & auCRLF
txt = txt & 'MENUITEM SEPARATOR' & auCRLF
txt = txt & 'MENUITEM "Фон\tBackground", 70004' & 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
# перебор ключей ColorFilterN
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
If BACKDROP_THREAD > 0 Then
txt = txt & 'MENUITEM "Текущий элемент - ' & CF_NAME & '", 70050' & auCRLF
EndIf
txt = txt & 'MENUITEM "Первоначальные значения секции [Colors]", 70000'
Return txt
EndFunc
Func ShowBackdropMenu(lParam)
# вызов с Shift
# копировать значение -1 в буфер
If IsPressed(0x10) Then
SetDefaultColor
Return
EndIf
# координаты кнопки вызова меню
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 = "Background"
IniRead /R val %COMMANDER_INI% "Colors" "BackColor" -1
# значение цвета
CL_VALUE = val
ColorItemChange(CL_VALUE)
# запуск из меню
If lParam = 0 Then
ShowBackHint("Цвет типа выбран" & auCR & "Значения будут применятся к " & CF_NAME)
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 & "Значения будут применятся к " & CF_NAME, false)
EndFunc
# смена элемента
Func ColorItemChange(ColorText)
# очистка буфера
ClipPut(ColorText)
# синхронизация цвета
# ColorSync(ColorText)
EndFunc
Func ColorSync(ColorText)
Local h = WinFind(0, "TfrmColorPick")
If h > 0 Then
# синхронизация цвета с окном ColorMania
WinSetText(ColorText, WinFind(h, "TEdit", 1))
b = WinFind(h, "TButton", 2)
SendMessage(b, 0xF5, 0, 0)
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
Func SetDefaultColor()
If BACKDROP_THREAD > 0 Then
ClipPut("-1")
ShowBackHint("Установлен цвет по-умолчанию для " & CF_NAME)
Else
ShowHint("Отслеживание цвета не запущено")
Endif
EndFunc
# массивы значений из бар-файла
Global aBarList = List(), _
aBarList2 = List()
# массивы предопределенных значений
# последний элемент используется для записи начального фона
Global aBackList = List(7566195, 7497811, 9865603, 8421230, -1)
Global aBackList2 = List(7566195, 7497811, 9865603, 8421230, -1)
# Alt+Click активная панель
# использовать бар-файл для переключения фона
ControlSetMouseAction /L /K:A 3 SetColorNum 1
ControlSetMouseAction /L /K:S /K:A 3 SetColorNum 1
# Alt+Click неактивная панель
# использовать встроенный массив для переключения фона
ControlSetMouseAction /L /K:A 4 SetColorNum 2
# регистрация команды
# вызов из кнопки или пункта меню
RegisterCommand 70040 "SetColorNum"
Func SetColorNum(lParam)
Local bkg1, bkg2, blue, green, red, txt, i = 1
# удержание Win (клик по файловой панели + Alt)
# смена цветовой схемы
If lParam = 1 And IsPressed(0x5B) Then
SwitchColors(1)
Return
EndIf
# удержание Shift
# переключение в обратном направлении
If IsPressed(0x10) Then i = -1
# удержание Win (вызов из кнопки)
# запуск автоперебора
If lParam = 0 And IsPressed(0x5B) Then
If IsPressed(0x12) Then
SetPulsar 1
Return
ElseIf IsPressed(0x11) Then
SetPulsar 2
Return
Endif
EndIf
# удержание Alt (вызов из кнопки)
# параметры задержки
If lParam = 0 And IsPressed(0x12) Then
If IsPressed(0x10) Then
SetPulsarDelay -10
Else
SetPulsarDelay +10
Endif
Return
EndIf
# массивы переключения цвета фона
Local aColorsList, aColorsList2
# индекс цвета в массиве
Static ColorIndex = -1
# массив из бар-файла (по умолчанию)
If lParam = 0 Then lParam = 1
# удержание Ctrl
# использовать резевный массив
If IsPressed(0x11) Then lParam = 2
# удержание Win
# принудительное чтение бар-файла
If lParam = 1 And IsPressed(0x5B) Then aBarList.Count = 0
# инициализация массива из бар-файла
If lParam = 1 And aBarList.Count = 0 Then
If Not LoadColorBar() Then
Sleep(1000)
WinSetState(23)
Return
EndIf
EndIf
# добавление начального фона к резерву
aBackList[aBackList.Count-1] = BackColor1
aBackList2[aBackList2.Count-1] = BackColor2
If lParam = 1 Then
aColorsList = aBarList
aColorsList2 = aBarList2
Else
aColorsList = aBackList
aColorsList2 = aBackList2
EndIf
ColorIndex = ColorIndex + i
If ColorIndex > aColorsList.Count - 1 Then ColorIndex = 0
If ColorIndex < 0 Then ColorIndex = aColorsList.Count - 1
bkg1 = aColorsList[ColorIndex]
bkg2 = aColorsList2[ColorIndex]
WriteBackground(bkg1, bkg2)
txt = "Фон " & ColorIndex + 1 & " из " & aColorsList.Count & auLF & "Значение: " & bkg1
If bkg1 = -1 Then bkg1 = 1*255 + 256*255 + 65536*255
blue = floor(bkg1/65536)
green = bkg1 - (blue * 65536)
green = floor(green/256)
red = bkg1 - (blue * 65536) - (green * 256)
txt = txt & auLF & "Красный: " & red & auLF & "Зелёный: " & green & auLF & "Синий: " & blue
ShowHint(txt)
EndFunc
Func LoadColorBar()
Local i, b, b2, p, c, bar = CL_BAR, max = 1*255 + 256*255 + 65536*255
If Not FileExist(bar) Then
ShowHint("Панель не существует: " & bar)
Return 0
Endif
IniRead c %bar% "Buttonbar" "Buttoncount" -1
If c = -1 Or IsInt(c) = false Then
ShowHint("Панель повреждена: " & bar)
Return 0
EndIf
If c < 1 Then
ShowHint("Количество кнопок < 1 " & bar)
Return 0
Endif
# очистка от старых значений
aBarList.Count = 0
aBarList2.Count = 0
For i = 1 To c
# перебор ключей ParamN
IniRead p %bar% "Buttonbar" %"'Param' & %i%" ""
# маркер не найден
If Not StrPos(p, "BackColorsMessage") Then Continue
# маркер найден: значение ключа ParamN
b = StrTrim(StrPart(p, ",", 2))
b2 = StrTrim(StrPart(p, ",", 3))
b2 = StrPart(b2, ")", 1)
# корректное значение сохраненного фона
If IsInt(b) And b >= 0 and b <= max Then
aBarList.Add(b)
# корректное значение второго фона
If IsInt(b2) And b2 >= 0 and b2 <= max Then
aBarList2.Add(b2)
Else
# некорректное значение второго фона
aBarList2.Add(b)
EndIf
EndIf
Next
# перебор не дал результата
If aBarList.Count = 0 Then
ShowHint("Панель не содержит значений фона " & auCRLF & bar)
Return 0
Endif
# значения найдены
# добавление начального фона к массивам
aBarList.Add(BackColor1)
aBarList2.Add(BackColor2)
Return 1
EndFunc
Func SetPulsarDelay(lParam)
PulsarDelay += lParam
If PulsarDelay > 200 Then PulsarDelay = 20
If PulsarDelay < 20 Then PulsarDelay = 200
IniWrite /R %COMMANDER_INI% "Autorun" "PulsarDelay" %PulsarDelay%
ShowHint("Задержка автоперебора: " & PulsarDelay)
Sleep(1000)
WinSetState(23)
EndFunc
# переключение цветовой схемы
RegisterCommand 70051 "SwitchColors"
Func SwitchColors(lParam)
Local n = "Colors", f, p = %COMMANDER_PATH% & "\Ini\", _
num, theme, desc
# счетчик номеров
Local c = 0
# оригинальный файл Colors.ini
f = p & n & ".ini"
IniRead num %f% "ColorTheme" "Instance" 0
IniRead desc %f% "ColorTheme" "Description"
IniRead theme %f% "ColorTheme" "Name"
# lParam 0 - вызов из кнопки
If lParam = 0 And IsPressed (0x12) Then
ShowHint("Тема: " & theme & auCRLF & "Описание: " & desc & auCRLF & "Номер: " & num)
Return
EndIf
If Not IsInt(num) Then
ShowHint("Значение Instance не является числом: " & num)
Return
Endif
If num < 0 And num > 5 Then
ShowHint("Значение Instance выходит за границы: " & num)
Return
Endif
# текущий номер темы
c = num
If c >= 5 Then c = 0
# следующий номер темы
c += 1
# текущая -> предыдущая
prev_theme = p & n & num & ".ini"
# следующая по номеру тема
next_theme = p & n & c & ".ini"
# имя файла в ТС
tc_name = n & ".ini"
prev_name = n & num & ".ini"
next_name = n & c & ".ini"
If lParam = 0 And IsPressed (0x10) Then
ShowHint(prev_theme & auCRLF & next_theme)
Return
EndIf
If Not FileExist(next_theme) Then
c = 1
If c = num Then
ShowHint("Не удалось переключиться на тему." & auCRLF & "Файл: " & next_theme)
Return
Endif
next_theme = p & n & c & ".ini"
If Not FileExist(next_theme) Then
ShowHint("Не удалось переключиться на тему." & auCRLF & "Файл: " & next_theme)
Return
Endif
EndIf
ShellExec /SW_HIDE /WAIT:2000 %COMSPEC% '/c rename "%f%" %prev_name%'
If FileExist(f) Then
ShowHint("Не удалось переименовать " & f & " в " & prev_name)
Return
Endif
ShellExec /SW_HIDE /WAIT:2000 %COMSPEC% '/c rename "%next_theme%" %tc_name%'
If FileExist(next_theme) Then
ShowHint("Не удалось переименовать " & next_theme & " в " & tc_name)
Return
Endif
SendCommand 2957
SendCommand 2957
# смена начальных значений фона
IniRead /R BackColor1 %COMMANDER_INI% "Colors" "BackColor" -1
IniRead /R BackColor2 %COMMANDER_INI% "Colors" "BackColor2" -1
aBarList.Count = 0
aBarList2.Count = 0
If lParam = 0 And IsPressed (0x11) Then lParam = 1
# lParam 1 - вызов с указанием параметра (Alt+Win+Click на панелях)
If lParam = 1 Then
IniRead num %f% "ColorTheme" "Instance" 0
IniRead desc %f% "ColorTheme" "Description"
IniRead theme %f% "ColorTheme" "Name"
ShowHint("Тема: " & theme & auCRLF & "Описание: " & desc & auCRLF & "Номер: " & num)
EndIf
EndFunc |
|
|