View previous topic :: View next topic |
Author |
Message |
Loopback
Joined: 07 Sep 2009 Posts: 1580
|
(Separately) Posted: Sat Nov 09, 2024 23:04 Post subject: |
|
|
Orion9 wrote: | Равномерное изменение тональности фона
Пульсар коммандера
|
Может у меня что-то с расцветкой не то, но меняет только один раз, первый вариант на чёрный, второй на белый
yahuu wrote: | Как WinFind найти "окно" #32768? Или меню? |
Всё сделано правильно, только перед поиском нужна задержка, меню не успевает появиться.
yahuu wrote: | Как получить координаты курсора? |
MouseGetPos.
Всё вместе как-то так:
Code: |
Func DisplayProcessBar
CommandExec em_ProcessBar
Sleep(50)
MouseGetPos("", "y")
WinSetPos("", y,"","","", WinFind(0, "#32768"))
EndFunc
|
|
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 797
|
(Separately) Posted: Sun Nov 10, 2024 01:09 Post subject: |
|
|
Loopback wrote: | Может у меня что-то с расцветкой не то, но меняет только один раз, первый вариант на чёрный, второй на белый  |
Ну вот, получил незачет
Проверял только на сером и на его пятидесяти оттенках - вроде работает.) Цветной фон тоже меняет, но дойдя до границы, сбрасывает в белый, а затем, соответственно, в серые тона.
А вообще, по большому счету, это был прикол Хотя потребность в инкрементальном увеличении или уменьшении тональности на лету давненько назревала. Иногда возникает ощущение чуть пригасить или добавить яркости тону панели. |
|
Back to top |
|
 |
Monarch-LFV

Joined: 22 Jul 2019 Posts: 332
|
(Separately) Posted: Sun Nov 10, 2024 01:19 Post subject: |
|
|
Orion9 wrote: | Иногда возникает ощущение чуть пригасить или добавить яркости тону панели. |
А не лучше уменьшать яркость всего монитора, а не только панелей ТС? В других то приложениях она остается бить по глазам. |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 797
|
(Separately) Posted: Sun Nov 10, 2024 14:21 Post subject: |
|
|
Monarch-LFV
Можно и монитора. Но я, наверно, не совсем точно выразился. Речь скорее не о яркости, а о светлости. И только фона панелей, а не всего экрана. Например, когда ищешь новый универсальный цвет, чтобы можно было его тонко подстраивать на лету, сразу видя все изменения на панелях в реальном времени, а не после закрытия диалоговых окон и кликов на окнопки "OK" или "Применить".
Сейчас поэксперементировал с новый фишкой на это счет - при помощи ColorMania быстро примеривать фон на панелях.
https://www.blacksunsoftware.com/colormania.html
Это очень очень грубый код, но он работает.
 Hidden text Code: | 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
|
Скрипт отслеживает буфер обмена, и если в нем находится целое значение попадающее в диапазон цветов фона, он его применяет. В ColorMania нужно выбрать формат Powerbuilder, который подходит для ТС, затем выбрать нужный цвет и нажать "Copy". Скрипт перехватить в буфере число и применит его. Повторю, что это очень грубый и сырой код, который еще нужно дорабатывать и дорабатывать, доделав к нем кучу проверок и защиту от лишней и некорректой записи, а также надлежащий старт/стоп и статус.
Хотел попутно спросить у разработчика. А как получить значение с контрола в ColorMania, где хранится значени цвета? Хэндлы все получаются как надо, а вот текст не вытягивается:
Code: | h = WinFind(0, "TfrmColorPick")
if h > 0 then
c = WinFind(h, "TEdit", 1)
MsgBox(WinGetText(c))
endif |
|
|
Back to top |
|
 |
yahuu
Joined: 22 Jun 2023 Posts: 34
|
(Separately) Posted: Sun Nov 10, 2024 16:44 Post subject: |
|
|
Loopback wrote: |
yahuu wrote: | Как получить координаты курсора? |
MouseGetPos.
|
Я хочу получить не координаты курсора мыши, а координаты объекта, на котором в данный момент установлен фокус в списке файлов. Я хочу переместить меню поближе к нему. |
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1580
|
(Separately) Posted: Sun Nov 10, 2024 20:35 Post subject: |
|
|
Orion9 wrote: | Хэндлы все получаются как надо, а вот текст не вытягивается |
Да, это проблема в WinGetText, использованный там GetWindowText не может получать текст контролов другого приложения. Исправлю.
yahuu wrote: | Я хочу получить не координаты курсора мыши, а координаты объекта, на котором в данный момент установлен фокус в списке файлов. |
Понятно. В данный момент такого нет, но запланировано. |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 797
|
(Separately) Posted: Mon Nov 11, 2024 01:15 Post subject: |
|
|
Loopback wrote: | Да, это проблема в WinGetText, использованный там GetWindowText не может получать текст контролов другого приложения. Исправлю. |
Было бы хорошо: можно было бы сразу считывать и применять значения.
Но и сейчас с кнопкой "Copy" неплохо работает. Довел до более-менее пригодного состояния в отдельном модуле:
 Backdrop.aucfg Code: | # 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 |
 Кнопка Code: | TOTALCMD#BAR#DATA
70001
%COMMANDER_PATH%\Utilites\ColorMania\ColorMania.exe
Включить/Выключить|Отслеживание в буфере цвета фона|Ctrl - Добавить яркость|Ctrl+Shift - Убавить яркость|Alt - Вернуть предыдущий
70001
|
Все как и раньше, но теперь есть управление через кнопку + статус в заголовке (но тут придется самостоятельно возвращать предыдущее значение заголовка отдельной парой строк, если это требуется). Скрипт после запуска следит за буфером и ждет численного значения, которое применяется в качестве фона. Удобно использовать со сторонними утилитами, например с ColorMania. Можно отдельно повышать или уменьшать тон фона комбинациями клавиш или нажатием на кнопку с клавишами-модификаторами. Пульсар оказался, кстати, не таким уж и бесполезным, наоборот - наглядно демонстрирует градацию тонов. Но работает не так совершенно и может уходить в "серую зону"
Потестировать как следут времени не было, т.ч. могут быть косяки. Но вот поиграться с выбором цвета фона, как в былые времена, желания прибавилось
P.S.
Тут еще возникла необходимость автоматического закрытия хинта через переод времени. Поммню, мы делали задержку Delay, может сделать параметр, который будет скрывать подсказку автоматически? |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 797
|
(Separately) Posted: Mon Nov 11, 2024 11:36 Post subject: |
|
|
Loopback
Еще один вопрос. А можно как-то изменить текст в строке состояния?
Code: | h = WinFind(AUTORUN_TCHANDLE, "TMyPanel", 5)
MsgBox(WinGetText(h)) |
Текст прочитан.
Code: | WinSetText("Test Text", h)
WinRedraw |
Если верить Autoit Windows Info, текст устанавливается, но изменения в ТС не отображаются.
QuickSearch eXtended во время работы создает симпатичную иконку в строке состояния, которая используются в качестве индикатора активности. Можно как-то придумать, чтобы Autorun тоже загружал иконку или маленькую bmp-шку куда угодно (хоть в заголовок) для индикации внутренних процессов?
Добавлено спустя 2 часа 41 минуту:
Что-то я забыл про такие классные ключики, как /R /DM для команды SetHotkeyAction. С ними вообще ништяк работает Никакой автоперебор тонов теперь не нужен, но оставил ради прикола. Теперь Ctrl+"+" запускает градации вверх, а Ctrl+"-" - вниз. Остановить можно повторным нажатием, либо ESC. Добавил счетчик записи в ini-файл и возможность посмотреть текущие значения с клавишей Win. И всякие прочие мелкие доработки. В общем, теперь уже лучше
 Backdrop.aucfg Code: | # 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 |
 Кнопка Code: | TOTALCMD#BAR#DATA
70001
%COMMANDER_PATH%\Utilites\ColorMania\ColorMania.exe
Включить/Выключить|Отслеживание в буфере цвета фона|Ctrl - Убавить яркость|Ctrl+Shift - Добавить яркость|Alt - Вернуть предыдущий|Win - Показать значения
70001
|
P.S.
Все. Наигрался я с цветами  |
|
Back to top |
|
 |
Avada

Joined: 01 Aug 2008 Posts: 10428 Location: Россия, Саратов
|
(Separately) Posted: Mon Nov 11, 2024 15:34 Post subject: |
|
|
Orion9 wrote: | QuickSearch eXtended во время работы создает симпатичную иконку в строке состояния, которая используются в качестве индикатора активности. |
Вы уверены? Пользуюсь постоянно много лет, но ничего подобного не наблюдаю. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия.
Last edited by Avada on Mon Nov 11, 2024 16:32; edited 1 time in total |
|
Back to top |
|
 |
sa
Joined: 29 Apr 2009 Posts: 2704
|
(Separately) Posted: Mon Nov 11, 2024 15:42 Post subject: |
|
|
Может, имеется ввиду встроенный быстрый поиск? |
|
Back to top |
|
 |
Avada

Joined: 01 Aug 2008 Posts: 10428 Location: Россия, Саратов
|
(Separately) Posted: Mon Nov 11, 2024 15:45 Post subject: |
|
|
sa
У встроенного быстрого поиска тем более ничего там быть не должно. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
 |
sa
Joined: 29 Apr 2009 Posts: 2704
|
(Separately) Posted: Mon Nov 11, 2024 15:49 Post subject: |
|
|
Перепутал с быстрым фильтром:
Quote: | Фильтрация остаётся активной и после закрытия диалога; это будет отмечено специальным значком в строке состояния файловой панели. |
|
|
Back to top |
|
 |
Monarch-LFV

Joined: 22 Jul 2019 Posts: 332
|
(Separately) Posted: Mon Nov 11, 2024 15:50 Post subject: |
|
|
Avada
QuickSearch eXtended действительно создает иконку фильтра в правом углу строки состояния, которая говорит, что включен фильтр (должна быть зажата Ctrl+S на самом фильтре). Первое нажатие на Esc убирает поле ввода фильтра, но значок внизу остается, второе нажатие Esc сбрасывает фильтр и значок исчезает. Удобно! |
|
Back to top |
|
 |
Avada

Joined: 01 Aug 2008 Posts: 10428 Location: Россия, Саратов
|
(Separately) Posted: Mon Nov 11, 2024 16:31 Post subject: |
|
|
Monarch-LFV
Теперь понял, о чём речь. Да, быстрый фильтр. И это, разумеется, в самом деле собственная функция TC, а не упомянутой утилиты. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1580
|
(Separately) Posted: Mon Nov 11, 2024 16:53 Post subject: |
|
|
Orion9 wrote: | Поммню, мы делали задержку Delay, может сделать параметр, который будет скрывать подсказку автоматически? |
В этом нет необходимости. ShowHint не блокирует скрипт, поэтому можно организовать задержку с Sleep, а потом установить фокус на окно тотала WinSetState(23), хинт при этом закроется.
Orion9 wrote: | А можно как-то изменить текст в строке состояния?
Если верить Autoit Windows Info, текст устанавливается, но изменения в ТС не отображаются. |
Значит панель c собственной отрисовкой, данные тотал берет откуда-то из другого места и они могут не совпадать с текстом контрола. Так что видимо нет, нельзя.
Orion9 wrote: | Можно как-то придумать, чтобы Autorun тоже загружал иконку или маленькую bmp-шку куда угодно (хоть в заголовок) для индикации внутренних процессов? |
Вряд ли. До времени подобных свистелок ещё далеко. |
|
Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|