1

Тема: AHK: возможно ли у GUI окна сделать прозрачность и проницаемость?

Допустим создаю gui с текстовым полем. И необходимо по горячей клавише увеличить прозрачность этого окна на 75%, и включить полную проницаемость. Т.е. чтобы в области окна можно было манипулировать средой рабочего стола и других окон, что находятся за ним.
Не нашел в свойствах GUI такую возможность.
Скажите пожалуйста возможно ли это реализовать?

Код окна:


#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

Gui, +Resize  ; Задаем окну свойство изменять размер.
Gui, Add, Edit, vMainEdit WantTab W600 R20
Gui, Show,, Untitled
	

2

Re: AHK: возможно ли у GUI окна сделать прозрачность и проницаемость?

Попробуйте так:

Gui, +AlwaysOnTop
Gui, Add, Edit, vMainEdit WantTab W600 R20
Gui, Show,, Untitled
t := false
Return

$F1::
   t := !t
   WinSet, Transparent, % 255*(t ? 0.25 : 1), Untitled
   Gui, % (t ? "+" : "-") . "E" . WS_EX_TRANSPARENT := 0x20
Return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: pavel.garshin.01, 2022-08-28 16:34:14)

Re: AHK: возможно ли у GUI окна сделать прозрачность и проницаемость?

teadrinker, Спасибо.
Работает как часы.

Я понял как выставлять отдельно прозрачность:


Gui, +AlwaysOnTop
Gui, Add, Edit, vMainEdit WantTab W600 R20
Gui, Show,, Untitled
WinSet, Transparent, % 100, Untitled			;регулируем значение от 0 до 255

Так же, я так понимаю, что за проницаемость отвечает свойство WS_EX_TRANSPARENT. Однако, я так и не смог понять, как работает проницаемость по отдельности:


Gui, +AlwaysOnTop
Gui, Add, Edit, vMainEdit WantTab W600 R20
Gui, Show,, Untitled
Gui, % "+"  . "E" . WS_EX_TRANSPARENT := 0x20		;не работает
;Gui, % "-"  . "E" . WS_EX_TRANSPARENT := 0x20		;и так не работает

Начал гуглить. И нашел вариант, где он работает в связке со свойством WS_EX_LAYERED:


WS_EX_TRANSPARENT := 0x20
WS_EX_LAYERED := 0x80000
Gui, +AlwaysOnTop +LastFound
Gui, Add, Edit, vMainEdit WantTab W600 R20
Gui, Show,, Untitled

WinSet, ExStyle, % "+" WS_EX_LAYERED|WS_EX_TRANSPARENT

Нашел справку о Расширенных стилях окон Windows:
https://docs.microsoft.com/ru-ru/window … dow-styles
WS_EX_LAYERED - делает окно многоуровневым. Это и есть проницаемость? Но почему у Вас в примере оно работает без WS_EX_LAYERED? И за что тогда отвечает WS_EX_TRANSPARENT?

Можете пожалуйста объяснить?

4

Re: AHK: возможно ли у GUI окна сделать прозрачность и проницаемость?

pavel.garshin.01 пишет:
WinSet, Transparent, % 100, Untitled			;регулируем значение от 0 до 255

Знак процента здесь не нужен, у меня он есть только из-за того, что вместо конкретного значения используется выражение 255*(t ? 0.25 : 1).

pavel.garshin.01 пишет:

я так и не смог понять, как работает проницаемость по отдельности

Действительно, оно работает только в связке с WS_EX_LAYERED. В моём примере WS_EX_LAYERED устанавливается автоматически при добавлении прозрачности:

WS_EX_LAYERED := 0x80000

Gui, Show, w300 h300, My Gui
WinGet, exStyle, ExStyle, My Gui
MsgBox, % exStyle & WS_EX_LAYERED

WinSet, Transparent, 255, My Gui
WinGet, exStyle, ExStyle, My Gui
MsgBox, % Format("{:#x}", exStyle & WS_EX_LAYERED)
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: возможно ли у GUI окна сделать прозрачность и проницаемость?

teadrinker, ну понятно. Когда надо будет только проницаемость поставить буду использовать в связке с WS_EX_LAYERED. А когда еще и прозрачность увеличить - то тогда с Transparent.
Ок, спасибо за помощь.