Тема: AHK: Эффекты окон - Blur, Glass, TransParent, TransColor.
Из рубрики - а вдруг.
Реально ли в Windows 10 отобразить рамку и заголовок окна как Windows 7?
Win10x64 AhkSpy, Hotkey, ClockGui
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Из рубрики - а вдруг.
Реально ли в Windows 10 отобразить рамку и заголовок окна как Windows 7?
Что еще за рамка и заголовок? Нужен стиль, эффект Aero, или и то и другое?
Для всей системы или для отдельного окна?
Полупрозрачная рамка для отдельного окна.
И так.
Для всей системы Aero видел, для отдельного окна не уверен.
Хотя да, это возможно, используя недокументированное SetWindowCompositionAttribute API.
Что касается стиля кнопок и углов, то они контролируются, как ни странно, стилем. Можете взять его из готовых решений предлагающих переделать стиль под Windows 7. Применить стиль можно с помощью GUI Skinning Methods.
P.S.
Совсем забыл, serzh82saratov'у ведь можно писать только на великом и могучем, а по обеим ссылкам нерусский текст.
Придется ему снова выбирать — сплевывать или сглатывать.
В заголовке под текстом ещё бы фон попрозрачнее...
Придется ему снова выбирать
Придется, такая жизнь.
Теперь интересно, можно ли перенести это на семёрку, как есть, то есть только блюр, без зеркального эффекта.
EnableBlur(gHwnd)
{
; WindowCompositionAttribute
WCA_ACCENT_POLICY := 19
; AccentState
ACCENT_DISABLED := 0,
ACCENT_ENABLE_GRADIENT := 1,
ACCENT_ENABLE_TRANSPARENTGRADIENT := 2
ACCENT_ENABLE_BLURBEHIND := 3
ACCENT_INVALID_STATE := 4
accentStructSize := VarSetCapacity(AccentPolicy, 4*4, 0)
NumPut(ACCENT_ENABLE_BLURBEHIND, AccentPolicy, 0, "UInt")
padding := A_PtrSize == 8 ? 4 : 0
VarSetCapacity(WindowCompositionAttributeData, 4 + padding + A_PtrSize + 4 + padding)
NumPut(WCA_ACCENT_POLICY, WindowCompositionAttributeData, 0, "UInt")
NumPut(&AccentPolicy, WindowCompositionAttributeData, 4 + padding, "Ptr")
NumPut(accentStructSize, WindowCompositionAttributeData, 4 + padding + A_PtrSize, "UInt")
DllCall("SetWindowCompositionAttribute", "Ptr", gHwnd, "Ptr", &WindowCompositionAttributeData)
}
Gui +LastFound +hwndgHwnd +AlwaysOnTop -Caption
Gui, Color, 000000
; WinSet, TransColor, 000000
Gui, Font, s64, Segoe UI
Gui, Add, Text, x0 y200 w500 Center cWhite, Hello Blur!
Gui, Show, w500 h500 Center
EnableBlur(gHwnd)
И как всё таки добиться зеркального эффекта в 10.
Зеркальный эффект.
Я же говорю, такие времена, что только с кем не бывает.
На Windows 7 текст в контролах почему то прозрачный, судя по аналогии с окном пуск, как то это можно починить.
#SingleInstance Force
#NoEnv
Gui, +hwndhGui
Gui, Color, 000000
Gui, Font, s33
Gui, Add, Button, -BackgroundTrans, Button
Gui, Add, Text, wp Center -BackgroundTrans, Text
Gui, Add, Edit, wp Center -BackgroundTrans, Edit
Gui, Show, , % " "
VarSetCapacity(rect, 16, 0xff) ; This is the same as setting all fields to -1.
DllCall("dwmapi\DwmExtendFrameIntoClientArea", "Ptr", hGui, "Ptr", &rect)
Return
Так текст с +BackgroundTrans и png картинки отображаются с обводкой TransColor.
TransColor := 0xfffff9
Gui, +hwndhGui +Resize
Gui, Color, %TransColor%
VarSetCapacity(rect, 16, 0xff) ; This is the same as setting all fields to -1.
DllCall("dwmapi\DwmExtendFrameIntoClientArea", "Ptr", hGui, "Ptr", &rect)
Gui, Font, s66 q4
Gui, Add, Button, -BackgroundTrans, Button
Gui, Add, Text, wp Center -BackgroundTrans, Text
Gui, Add, Text, wp Center +BackgroundTrans, Text
Gui, Add, Edit, wp Center -BackgroundTrans, Edit
Gui, Show, , % " "
WinSet, TransColor, %TransColor%,ahk_id %hGui%
DllCall("InvalidateRect", "Ptr", hGui, "Ptr", 0, "int", 0)
Gui, +hwndhGui +LastFound -Caption +AlwaysOnTop
WinSet, TransParent, 0
Gui, Show, NA w1111 h1111
Возможно ли кликнуть в полностью прозрачное окно? TransColor не хотелось бы использовать.
Gui, +hwndhGui +LastFound -Caption +AlwaysOnTop
Gui, Color, 123456
WinSet, TransColor, 123456
Gui, Show, NA w1111 h1111
Ответов не нашёл, спрошу ещё раз, может кто сталкивался.
Зачем нужно задавать TransColor для нормального отображения контролов в Blur.
Как регулировать степень Blur.
Как окно Blur сделать кликабельным, чтобы клики не проходили насквозь.
Как создать окно окно с эффектом Acrylic. Нашёл - https://www.autohotkey.com/boards/viewtopic.php?t=63643
Как сделать часть окна с эффектом Acrylic
#SingleInstance Force
#Persistent
#NoEnv
DetectHiddenWindows, On
Gui +Resize +hWndhMain -Caption -SysMenu
Gui, Color, 000001
WinSet, TransColor, 000001 , ahk_id %hMain%
Gui, Font, S64 q4, Segoe UI
Gui, Add, Text, X0 Y200 W500 Center , Hello Blur!
Gui, Show, na W500 H500 Center
EnableBlur( hMain )
Return
EnableBlur( hWnd ) {
; WindowCompositionAttribute
Local WCA_ACCENT_POLICY := 19
; AccentState
Local ACCENT_DISABLED := 0
, ACCENT_ENABLE_GRADIENT := 1
, ACCENT_ENABLE_TRANSPARENTGRADIENT := 2
, ACCENT_ENABLE_BLURBEHIND := 3
, ACCENT_INVALID_STATE := 4
Local accentStructSize := VarSetCapacity( AccentPolicy, 4 * 4, 0 )
NumPut( ACCENT_ENABLE_BLURBEHIND, AccentPolicy, 0, "UInt" )
Local padding := ( A_PtrSize == 8 ? 4 : 0 )
VarSetCapacity( WindowCompositionAttributeData, 4 + padding + A_PtrSize + 4 + padding )
NumPut( WCA_ACCENT_POLICY, WindowCompositionAttributeData, 0, "UInt" )
NumPut( &AccentPolicy, WindowCompositionAttributeData, 4 + padding, "Ptr" )
NumPut( accentStructSize, WindowCompositionAttributeData, 4 + padding + A_PtrSize, "UInt" )
DllCall( "User32.dll\SetWindowCompositionAttribute", "Ptr", hWnd, "Ptr", &WindowCompositionAttributeData )
}
GuiEscape:
GuiClose:
Escape:: ExitApp
Зачем нужно задавать TransColor для нормального отображения контролов в Blur.
Функция не документирована, но вот здесь один чувак пишет:
Simply ensure your window uses a (background) brush with an alpha channel
Нужен бекграунд с альфа-каналом. Видимо, с обычными окнами этого можно добиться только через TransColor (попробовал через Transparent, но не работает).
Как регулировать степень Blur.
Скорее всего никак, это наверно какие-то системные настройки.
Как окно Blur сделать кликабельным, чтобы клики не проходили насквозь.
Так элементарно.
Width := 600, Height := 400
pToken := Gdip_Startup()
Gui, New, -Caption +E0x80000 +LastFound +AlwaysOnTop +ToolWindow +hwndhGui
Gui, Show, NA
hbm := CreateDIBSection(Width, Height)
hdc := CreateCompatibleDC()
obm := SelectObject(hdc, hbm)
G := Gdip_GraphicsFromHDC(hdc)
Gdip_SetSmoothingMode(G, 4)
pBrush := Gdip_BrushCreateSolid(0x770077FF)
Gdip_FillRoundedRectangle(G, pBrush, 0, 0, Width, Height, 20)
Gdip_DeleteBrush(pBrush)
Options = x0 y38p w100p Centre cFFFFFFFF r4 s60
Gdip_TextToGraphics(G, "Hello Blur!", Options, "Segoe UI", Width, Height)
UpdateLayeredWindow(hGui, hdc, 100, 100, Width, Height)
OnMessage(0x201, "WM_LBUTTONDOWN")
SelectObject(hdc, obm)
DeleteObject(hbm)
Gdip_DeleteGraphics(G)
Gdip_Shutdown(pToken)
EnableBlur(hGui)
Return
WM_LBUTTONDOWN() {
PostMessage, WM_NCLBUTTONDOWN := 0xA1, HTCAPTION := 2
}
EnableBlur( hWnd ) {
; WindowCompositionAttribute
Local WCA_ACCENT_POLICY := 19
; AccentState
Local ACCENT_DISABLED := 0
, ACCENT_ENABLE_GRADIENT := 1
, ACCENT_ENABLE_TRANSPARENTGRADIENT := 2
, ACCENT_ENABLE_BLURBEHIND := 3
, ACCENT_INVALID_STATE := 4
Local accentStructSize := VarSetCapacity( AccentPolicy, 4 * 4, 0 )
NumPut( 3, AccentPolicy, 0, "UInt" )
Local padding := ( A_PtrSize == 8 ? 4 : 0 )
VarSetCapacity( WindowCompositionAttributeData, 4 + padding + A_PtrSize + 4 + padding )
NumPut( WCA_ACCENT_POLICY, WindowCompositionAttributeData, 0, "UInt" )
NumPut( &AccentPolicy, WindowCompositionAttributeData, 4 + padding, "Ptr" )
NumPut( accentStructSize, WindowCompositionAttributeData, 4 + padding + A_PtrSize, "UInt" )
DllCall( "User32.dll\SetWindowCompositionAttribute", "Ptr", hWnd, "Ptr", &WindowCompositionAttributeData )
}
Так элементарно
Да уж, очевидно.
Но у меня текст не видно.
И что не так с панелью задач в десятке? При наложении на неё, окно мелькает.
Но у меня текст не видно.
Шрифт забыл указать, исправил. Но у меня на десятке и так работало.
И что не так с панелью задач в десятке? При наложении на неё, окно мелькает.
У меня немного мелькает, если двигать окно, наложенное на панель задач, но не критично.
Так текст появился. Без указания шрифт должен быть по умолчанию, странно.
Как так не критично, мелькает же.
А как у тебя ведёт себя панель уведомлений? У меня при появлении она полупрозрачна первые пол секунды, после практически непрозрачна.
Или например у меня меню пуск почти непрозрачна, ты у себя можешь сделать фон меню например полупрозрачным?
У меня по поводу прозрачности есть только одна настройка: Эффекты прозрачности вкл-выкл. При включенных панель задач и меню пуск лишь слегка прозрачны, только светлые пятна сквозь них проступают.
только светлые пятна сквозь них проступают.
Именно так.
Видел скрины что блюр в этих окнах намного прозрачнее, говорят что реестр поправь, и у всех работает, но у меня не вышло.
У меня получилось так через реестр.
Да, это я и пробовал.
Как регулировать степень Blur.
https://www.glass8.eu
(Сам не пробовал).
Устанавливается, при запуске aerohost.exe
This service is not supposed to be executed by the user.
Я нечто подобное ставил, но всё работало с глюками.
Как сделать часть окна с эффектом Acrylic
Думаю это должно быть доступно для разработчиков.
Например как в калькуляторе, только верхняя часть окна Acrylic.
Так элементарно.
А со стандартными контролами?
А ты такие примеры в каких-то приложениях видел?
EnableBlur(gHwnd)
{
; WindowCompositionAttribute
WCA_ACCENT_POLICY := 19
; AccentState
ACCENT_DISABLED := 0
ACCENT_ENABLE_GRADIENT := 1
ACCENT_ENABLE_TRANSPARENTGRADIENT := 2
ACCENT_ENABLE_BLURBEHIND := 3
ACCENT_INVALID_STATE := 4
accentStructSize := VarSetCapacity(AccentPolicy, 4*4, 0)
NumPut(ACCENT_ENABLE_BLURBEHIND, AccentPolicy, 0, "UInt")
padding := A_PtrSize == 8 ? 4 : 0
VarSetCapacity(WindowCompositionAttributeData, 4 + padding + A_PtrSize + 4 + padding)
NumPut(WCA_ACCENT_POLICY, WindowCompositionAttributeData, 0, "UInt")
NumPut(&AccentPolicy, WindowCompositionAttributeData, 4 + padding, "Ptr")
NumPut(accentStructSize, WindowCompositionAttributeData, 4 + padding + A_PtrSize, "UInt")
; DwmSetWindowAttribute https://docs.microsoft.com/ru-ru/windows/desktop/api/dwmapi/nf-dwmapi-dwmsetwindowattribute
DllCall("SetWindowCompositionAttribute", "Ptr", gHwnd, "Ptr", &WindowCompositionAttributeData)
}
Gui +LastFound -Caption +Border +hwndgHwnd +AlwaysOnTop
Gui, Color, 000001
WinSet, TransColor, 000001
Gui, Font, s33, Segoe UI
Gui, Add, Text, Center cWhite, Hello Blur!
Gui, Add, Text, Center cRed , Hello Blur!
Gui, Add, Button, -BackgroundTrans, Button
Gui, Add, Text, wp Center -Background, Text
Gui, Add, Edit, wp Center -BackgroundTrans, Edit
Gui, Show, Center
EnableBlur(gHwnd)
GuiEscape:
GuiClose:
Escape:: ExitApp
Это ты что хотел показать? Клики проходят наскозь, там где blur. Я имел в виду пример, чтобы были стандартные контролы, blur, и клики не проходили насквозь.
Я про это и спрашиваю. Нет не видел, даже просто с блюром ни одного приложения.
Как окно Blur сделать кликабельным, чтобы клики не проходили насквозь.
На самом деле, правильнее было бы спросить, можно ли как-то сделать фон обычного окна вне контролов частично прозрачным. Я не представляю, как.
Устанавливается, при запуске aerohost.exe
"This service is not supposed to be executed by the user."
Я нечто подобное ставил, но всё работало с глюками.
А ты по инструкции запускал?
2) On Windows 8.1+, you should use host process which will inject DLL into DWM for you and also maintains that user settings are correctly loaded. Simply create schedule task to run aerohost.exe when your computer starts. This task must be created with admin privileges and run under SYSTEM account. You can find simple script to schedule such task here.
можно ли как-то сделать фон обычного окна вне контролов частично прозрачным
А что это даст в плане блюра?
А ты по инструкции запускал?
Нет конечно.
Я думал там интерфейс есть... Ладно фиг с ним, и так почему то ОС притормаживает.
А что это даст в плане блюра?
Не будут клики насквозь проходить.
Представим что сделали фон обычного окна вне контролов частично прозрачным, а блюр где будет? Ты имеешь ввиду наложить окна.
Блюр можно применить там, где есть прозрачность, полная или частичная. Transcolor даёт полную прозрачность, соответственно клики проходят насквозь. Если была бы частичная — окно принимало бы события мыши.
Я подумал что ты про прозрачность всего окна, а не про прозрачность конкретного цвета.
А почему ты решил, что я про прозрачность конкретного цвета? Нам нужно получить частичную прозрачность любым способом, но не всего окна, а именно только фона вне контролов.
Нам нужно получить частичную прозрачность любым способом, но не всего окна, а именно только фона вне контролов
Это невозможно, если окно не многослойное.
Вот всё окно, как тут блюр применить?
EnableBlur(gHwnd)
{
; WindowCompositionAttribute
WCA_ACCENT_POLICY := 19
; AccentState
ACCENT_DISABLED := 0
ACCENT_ENABLE_GRADIENT := 1
ACCENT_ENABLE_TRANSPARENTGRADIENT := 2
ACCENT_ENABLE_BLURBEHIND := 3
ACCENT_INVALID_STATE := 4
accentStructSize := VarSetCapacity(AccentPolicy, 4*4, 0)
NumPut(ACCENT_ENABLE_BLURBEHIND, AccentPolicy, 0, "UInt")
padding := A_PtrSize == 8 ? 4 : 0
VarSetCapacity(WindowCompositionAttributeData, 4 + padding + A_PtrSize + 4 + padding)
NumPut(WCA_ACCENT_POLICY, WindowCompositionAttributeData, 0, "UInt")
NumPut(&AccentPolicy, WindowCompositionAttributeData, 4 + padding, "Ptr")
NumPut(accentStructSize, WindowCompositionAttributeData, 4 + padding + A_PtrSize, "UInt")
; DwmSetWindowAttribute https://docs.microsoft.com/ru-ru/windows/desktop/api/dwmapi/nf-dwmapi-dwmsetwindowattribute
DllCall("SetWindowCompositionAttribute", "Ptr", gHwnd, "Ptr", &WindowCompositionAttributeData)
}
Gui +LastFound -Caption +Border +hwndgHwnd +AlwaysOnTop
WinSet, TransParent, 254
Gui, Font, s33, Segoe UI
Gui, Add, Text, Center cWhite, Hello Blur!
Gui, Add, Text, Center cRed , Hello Blur!
Gui, Add, Button, -BackgroundTrans, Button
Gui, Add, Text, wp Center -Background, Text
Gui, Add, Edit, wp Center -BackgroundTrans, Edit
Gui, Show, Center
EnableBlur(gHwnd)
GuiEscape:
GuiClose:
Escape:: ExitApp
Это невозможно, если окно не многослойное.
Я подозреваю, что так и есть, но где это написано?
Вот всё окно, как тут блюр применить?
Во-первых, это не прозрачность фона, а всего окна вместе с контролами. Во-вторых, через Transparent не работает, писал выше.
А почему ты решил, что я про прозрачность конкретного цвета?
Я ничего не понимаю. Ладно, как сделать блюр без Transcolor?
Я подвожу тебя к мысли, что с обычными окнами вообще не получится.
Как я понимаю добиться полупрозрачности можно только через UpdateLayeredWindow, которая в свою очередь не может быть применена к гуи созданному стандартным способом, так как нужен CreateCompatibleDC.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться