Страница 149 из 243
Добавлено: Сб ноя 09, 2024 22:04
Loopback
Orion9 писал(а):Равномерное изменение тональности фона
Пульсар коммандера
Может у меня что-то с расцветкой не то, но меняет только один раз, первый вариант на чёрный, второй на белый
yahuu писал(а):Как WinFind найти "окно" #32768? Или меню?
Всё сделано правильно, только перед поиском нужна задержка, меню не успевает появиться.
yahuu писал(а):Как получить координаты курсора?
MouseGetPos.
Всё вместе как-то так:
Код: Выделить всё
Func DisplayProcessBar
CommandExec em_ProcessBar
Sleep(50)
MouseGetPos("", "y")
WinSetPos("", y,"","","", WinFind(0, "#32768"))
EndFunc
Добавлено: Вс ноя 10, 2024 00:09
Orion9
Loopback писал(а):Может у меня что-то с расцветкой не то, но меняет только один раз, первый вариант на чёрный, второй на белый

Ну вот, получил незачет
Проверял только на сером и на его [s]пятидесяти[/s] оттенках - вроде работает.) Цветной фон тоже меняет, но дойдя до границы, сбрасывает в белый, а затем, соответственно, в серые тона.
А вообще, по большому счету, это был прикол

Хотя потребность в инкрементальном увеличении или уменьшении тональности на лету давненько назревала. Иногда возникает ощущение чуть пригасить или добавить яркости тону панели.
Добавлено: Вс ноя 10, 2024 00:19
Monarch-LFV
Orion9 писал(а):Иногда возникает ощущение чуть пригасить или добавить яркости тону панели.
А не лучше уменьшать яркость всего монитора, а не только панелей ТС? В других то приложениях она остается бить по глазам.
Добавлено: Вс ноя 10, 2024 13:21
Orion9
Monarch-LFV
Можно и монитора. Но я, наверно, не совсем точно выразился. Речь скорее не о яркости, а о светлости. И только фона панелей, а не всего экрана. Например, когда ищешь новый универсальный цвет, чтобы можно было его тонко подстраивать на лету, сразу видя все изменения на панелях в реальном времени, а не после закрытия диалоговых окон и кликов на окнопки "OK" или "Применить".
Сейчас поэксперементировал с новый фишкой на это счет - при помощи ColorMania быстро примеривать фон на панелях.
https://www.blacksunsoftware.com/colormania.html
Это очень очень грубый код, но он работает.
[cut]
Код: Выделить всё
SetHotkeyAction /K:C /V:187 FindWindow 1
SetHotkeyAction /K:C /V:189 FindWindow 0
Global WinWatch = 0
Func FindWindow(nParam)
Local h = 0, max = 1*255 + 256*255 + 65536*255, upd = 1, clip
# отслеживание уже запущено
if nParam = 1 and WinWatch = 1 then Return
WinWatch = nParam
While WinWatch = 1
clip = StrPart(ClipGet(), auLF, 1)
if IsInt(clip) then
if clip > 0 and clip <= max then
#WinSetText(clip)
IniWrite /R %COMMANDER_INI% "Colors" "BackColor" %clip%
IniWrite /R %COMMANDER_INI% "Colors" "BackColor2" %clip%
If upd = 1 Then
SendCommand 2957
SendCommand 2957
EndIf
endif
endif
Sleep(250)
if WinWatch = 0 then Return
Wend
EndFunc
[/cut]
Скрипт отслеживает буфер обмена, и если в нем находится целое значение попадающее в диапазон цветов фона, он его применяет. В ColorMania нужно выбрать формат Powerbuilder, который подходит для ТС, затем выбрать нужный цвет и нажать "Copy". Скрипт перехватить в буфере число и применит его. Повторю, что это очень грубый и сырой код, который еще нужно дорабатывать и дорабатывать, доделав к нем кучу проверок и защиту от лишней и некорректой записи, а также надлежащий старт/стоп и статус.
Хотел попутно спросить у разработчика. А как получить значение с контрола в ColorMania, где хранится значени цвета? Хэндлы все получаются как надо, а вот текст не вытягивается:
Код: Выделить всё
h = WinFind(0, "TfrmColorPick")
if h > 0 then
c = WinFind(h, "TEdit", 1)
MsgBox(WinGetText(c))
endif
Добавлено: Вс ноя 10, 2024 15:44
yahuu
Loopback писал(а):
yahuu писал(а):Как получить координаты курсора?
MouseGetPos.
Я хочу получить не координаты курсора мыши, а координаты объекта, на котором в данный момент установлен фокус в списке файлов. Я хочу переместить меню поближе к нему.
Добавлено: Вс ноя 10, 2024 19:35
Loopback
Orion9 писал(а):Хэндлы все получаются как надо, а вот текст не вытягивается
Да, это проблема в WinGetText, использованный там GetWindowText не может получать текст контролов другого приложения. Исправлю.
yahuu писал(а):Я хочу получить не координаты курсора мыши, а координаты объекта, на котором в данный момент установлен фокус в списке файлов.
Понятно. В данный момент такого нет, но запланировано.
Добавлено: Пн ноя 11, 2024 00:15
Orion9
Loopback писал(а):Да, это проблема в WinGetText, использованный там GetWindowText не может получать текст контролов другого приложения. Исправлю.
Было бы хорошо: можно было бы сразу считывать и применять значения.
Но и сейчас с кнопкой "Copy" неплохо работает. Довел до более-менее пригодного состояния в отдельном модуле:
[cut="Backdrop.aucfg"]
Код: Выделить всё
# Ctrl+Shift+"+" - Добавить яркость
# Ctrl+Shift+"-" - Убавить яркость
# Ctrl+"+" - Запуск пульсирования
# Ctrl+"-" - Остановка пульсирования
Global Pulsar = 0, BACKDROP_THREAD = 0, Previous1 = 0, Previous2 = 0
SetHotkeyAction /K:C /K:S /V:187 SetBackGround 1
SetHotkeyAction /K:C /K:S /V:189 SetBackGround 2
SetHotkeyAction /K:C /V:187 SetPulsar 1
SetHotkeyAction /K:C /V:189 SetPulsar 0
RegisterCommand 70001 "AutoBackdrop"
if Previous1 = 0 or Previous2 = 0 then
IniRead /R Previous1 %COMMANDER_INI% "Colors" "BackColor" -1
IniRead /R Previous2 %COMMANDER_INI% "Colors" "BackColor2" -1
endif
Func AutoBackdrop(lParam)
If IsPressed (0x10) And IsPressed (0x11) Then Return SetBackGround(1) # Ctrl+Shift+Click() - Добавить яркость
If IsPressed (0x11) Then Return SetBackGround(2) # Ctrl+Click() - Убавить яркость
If IsPressed (0x12) Then # Altt+Click() - Вернуть предыдущий фон
if Previous1 > 0 or Previous2 > 0 then
IniWrite /R %COMMANDER_INI% "Colors" "BackColor" %Previous1%
IniWrite /R %COMMANDER_INI% "Colors" "BackColor2" %Previous2%
SendCommand 2957
SendCommand 2957
endif
Return
endif
if BACKDROP_THREAD > 0 then # поток уже запущен
BACKDROP_THREAD = 0
else
BACKDROP_THREAD = 1
RunThread ThreadBackdrop
MsgBox("Отслеживание буфера запущено." & auLF & auLF & "Значения в буфере будут применятся к фону панелей.")
endif
EndFunc
Func ThreadBackdrop()
Local h = 0, max = 1*255 + 256*255 + 65536*255, clip, last = 0
IniRead /R Previous1 %COMMANDER_INI% "Colors" "BackColor" -1 # старые значения перед циклом
IniRead /R Previous2 %COMMANDER_INI% "Colors" "BackColor2" -1
While BACKDROP_THREAD = 1
clip = StrPart(ClipGet(), auLF, 1) # первая строка в буфере
if IsInt(clip) then
if clip > 0 and clip <= max and not (clip = last) then # число в диапазоне
WinSetText("Applying background value: " & clip)
IniWrite /R %COMMANDER_INI% "Colors" "BackColor" %clip%
IniWrite /R %COMMANDER_INI% "Colors" "BackColor2" %clip%
SendCommand 2957
SendCommand 2957
last = clip
Sleep(300)
endif
endif
Sleep(250)
WinSetText("BACKDROP_THREAD is running...")
Wend
BACKDROP_THREAD = 0
MsgBox("Отслеживание буфера завершено")
EndFunc
Func SetBackGround(nParam)
Local bkg1, bkg2, max = 1*255 + 256*255 + 65536*255
if Pulsar = 1 then max = 1*235 + 256*235 + 65536*235 # при пульсировании потолок чуть меньше
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
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
IniWrite /R %COMMANDER_INI% "Colors" "BackColor" %bkg1%
IniWrite /R %COMMANDER_INI% "Colors" "BackColor2" %bkg2%
SendCommand 2957
SendCommand 2957
EndFunc
Func SetPulsar(nParam)
if nParam = 1 and Pulsar = 1 then Return # цикл уже запущен
Pulsar = nParam
While Pulsar = 1
For j = 1 To 2
For i = 1 To 75
SetBackGround(j)
Sleep(25)
if Pulsar = 0 then Return
Next
Next
Wend
EndFunc
[/cut]
[cut="Кнопка"]
Код: Выделить всё
TOTALCMD#BAR#DATA
70001
%COMMANDER_PATH%\Utilites\ColorMania\ColorMania.exe
Включить/Выключить|Отслеживание в буфере цвета фона|Ctrl - Добавить яркость|Ctrl+Shift - Убавить яркость|Alt - Вернуть предыдущий
70001
[/cut]
Все как и раньше, но теперь есть управление через кнопку + статус в заголовке (но тут придется самостоятельно возвращать предыдущее значение заголовка отдельной парой строк, если это требуется). Скрипт после запуска следит за буфером и ждет численного значения, которое применяется в качестве фона. Удобно использовать со сторонними утилитами, например с ColorMania. Можно отдельно повышать или уменьшать тон фона комбинациями клавиш или нажатием на кнопку с клавишами-модификаторами. Пульсар оказался, кстати, не таким уж и бесполезным, наоборот - наглядно демонстрирует градацию тонов. Но работает не так совершенно и может уходить в "серую зону"
Потестировать как следут времени не было, т.ч. могут быть косяки. Но вот поиграться с выбором цвета фона, как в былые времена, желания прибавилось
P.S.
Тут еще возникла необходимость автоматического закрытия хинта через переод времени. Поммню, мы делали задержку Delay, может сделать параметр, который будет скрывать подсказку автоматически?
Добавлено: Пн ноя 11, 2024 13:16
Orion9
Loopback
Еще один вопрос. А можно как-то изменить текст в строке состояния?
Код: Выделить всё
h = WinFind(AUTORUN_TCHANDLE, "TMyPanel", 5)
MsgBox(WinGetText(h))
Текст прочитан.
Если верить Autoit Windows Info, текст устанавливается, но изменения в ТС не отображаются.
QuickSearch eXtended во время работы создает симпатичную иконку в строке состояния, которая используются в качестве индикатора активности. Можно как-то придумать, чтобы Autorun тоже загружал иконку или маленькую bmp-шку куда угодно (хоть в заголовок) для индикации внутренних процессов?
Добавлено спустя 2 часа 41 минуту:
Что-то я забыл про такие классные ключики, как
/R /DM для команды SetHotkeyAction. С ними вообще ништяк работает

Никакой автоперебор тонов теперь не нужен, но оставил ради прикола. Теперь Ctrl+"+" запускает градации вверх, а Ctrl+"-" - вниз. Остановить можно повторным нажатием, либо ESC. Добавил счетчик записи в ini-файл и возможность посмотреть текущие значения с клавишей Win. И всякие прочие мелкие доработки. В общем, теперь уже лучше
[cut="Backdrop.aucfg"]
Код: Выделить всё
# Ctrl+Shift+"+" - Добавить яркость
# Ctrl+Shift+"-" - Убавить яркость
# Ctrl+"+" - Авто повышение тонов вверх
# Ctrl+"-" - Авто повышение тонов ввиз
# ESC - Отмена
Global Pulsar = 0, BACKDROP_THREAD = 0, Previous1 = 0, Previous2 = 0
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
RegisterCommand 70001 "AutoBackdrop"
if Previous1 = 0 or Previous2 = 0 then
IniRead /R Previous1 %COMMANDER_INI% "Colors" "BackColor" -1
IniRead /R Previous2 %COMMANDER_INI% "Colors" "BackColor2" -1
endif
Func AutoBackdrop(lParam)
If IsPressed (0x10) And IsPressed (0x11) Then Return SetBackGround(1) # Ctrl+Shift+Click() - Добавить яркость
If IsPressed (0x11) Then Return SetBackGround(2) # Ctrl+Click() - Убавить яркость
If IsPressed (0x12) Then # Alt+Click() - Вернуть предыдущий фон
if Previous1 > 0 or Previous2 > 0 then
IniWrite /R %COMMANDER_INI% "Colors" "BackColor" %Previous1%
IniWrite /R %COMMANDER_INI% "Colors" "BackColor2" %Previous2%
SendCommand 2957
SendCommand 2957
endif
Return
endif
If IsPressed (0x5B) Then Return ShowBackColor() # Win+Click() - Показ значений
if BACKDROP_THREAD > 0 then # поток уже запущен
BACKDROP_THREAD = 0
else
BACKDROP_THREAD = 1
RunThread ThreadBackdrop
MsgBox("Отслеживание буфера запущено." & auLF & auLF & "Значения в буфере будут применятся к фону панелей.")
endif
EndFunc
Func ThreadBackdrop()
Local h = 0, max = 1*255 + 256*255 + 65536*255, clip, last = 0, w = 0
# старые значения перед циклом
IniRead /R Previous1 %COMMANDER_INI% "Colors" "BackColor" -1
IniRead /R Previous2 %COMMANDER_INI% "Colors" "BackColor2" -1
While BACKDROP_THREAD = 1
# первая строка в буфере
clip = StrPart(ClipGet(), auLF, 1)
if IsInt(clip) then
# новое число в диапазоне
if clip > 0 and clip <= max and not (clip = last) then
WinSetText("Applying background value: " & clip)
IniWrite /R %COMMANDER_INI% "Colors" "BackColor" %clip%
IniWrite /R %COMMANDER_INI% "Colors" "BackColor2" %clip%
SendCommand 2957
SendCommand 2957
w = w + 1
last = clip
Sleep(300)
endif
endif
Sleep(250)
WinSetText("BACKDROP_THREAD is running...")
Wend
BACKDROP_THREAD = 0
WinSetText("")
MsgBox("Отслеживание буфера завершено" & auLF & auLF & "Применений фона: " & w)
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 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
IniWrite /R %COMMANDER_INI% "Colors" "BackColor" %bkg1%
IniWrite /R %COMMANDER_INI% "Colors" "BackColor2" %bkg2%
SendCommand 2957
SendCommand 2957
EndFunc
Func SetPulsar(nParam)
local a, b, s
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
While Pulsar = 1
For j = a To b step s
For i = 1 To 75
SetBackGround(j)
Sleep(25)
if Pulsar = 0 then Return
If IsPressed (0x1B) Then
Pulsar = 0
Return
endif
Next
Next
Wend
EndFunc
Func ShowBackColor()
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
[/cut]
[cut="Кнопка"]
Код: Выделить всё
TOTALCMD#BAR#DATA
70001
%COMMANDER_PATH%\Utilites\ColorMania\ColorMania.exe
Включить/Выключить|Отслеживание в буфере цвета фона|Ctrl - Убавить яркость|Ctrl+Shift - Добавить яркость|Alt - Вернуть предыдущий|Win - Показать значения
70001
[/cut]
P.S.
Все. Наигрался я с цветами

Добавлено: Пн ноя 11, 2024 14:34
Avada
Orion9 писал(а):QuickSearch eXtended во время работы создает симпатичную иконку в строке состояния, которая используются в качестве индикатора активности.
Вы уверены? Пользуюсь постоянно много лет, но ничего подобного не наблюдаю.
Добавлено: Пн ноя 11, 2024 14:42
sa
Может, имеется ввиду встроенный быстрый поиск?
Добавлено: Пн ноя 11, 2024 14:45
Avada
sa
У встроенного быстрого поиска тем более ничего там быть не должно.
Добавлено: Пн ноя 11, 2024 14:49
sa
Перепутал с быстрым фильтром:
Фильтрация остаётся активной и после закрытия диалога; это будет отмечено специальным значком в строке состояния файловой панели.
Добавлено: Пн ноя 11, 2024 14:50
Monarch-LFV
Avada
QuickSearch eXtended действительно создает иконку фильтра в правом углу строки состояния, которая говорит, что включен фильтр (должна быть зажата Ctrl+S на самом фильтре). Первое нажатие на Esc убирает поле ввода фильтра, но значок внизу остается, второе нажатие Esc сбрасывает фильтр и значок исчезает. Удобно!
Добавлено: Пн ноя 11, 2024 15:31
Avada
Monarch-LFV
Теперь понял, о чём речь. Да, быстрый фильтр. И это, разумеется, в самом деле собственная функция TC, а не упомянутой утилиты.
Добавлено: Пн ноя 11, 2024 15:53
Loopback
Orion9 писал(а): Поммню, мы делали задержку Delay, может сделать параметр, который будет скрывать подсказку автоматически?
В этом нет необходимости. ShowHint не блокирует скрипт, поэтому можно организовать задержку с Sleep, а потом установить фокус на окно тотала WinSetState(23), хинт при этом закроется.
Orion9 писал(а):А можно как-то изменить текст в строке состояния?
Если верить Autoit Windows Info, текст устанавливается, но изменения в ТС не отображаются.
Значит панель c собственной отрисовкой, данные тотал берет откуда-то из другого места и они могут не совпадать с текстом контрола. Так что видимо нет, нельзя.
Orion9 писал(а):Можно как-то придумать, чтобы Autorun тоже загружал иконку или маленькую bmp-шку куда угодно (хоть в заголовок) для индикации внутренних процессов?
Вряд ли. До времени подобных свистелок ещё далеко.