如何在没有背景色的情况下通过进度条 GUI 制作 Autohotkey 单击
How to make Autohotkey Click through Progress Bar GUI without Background Color
在 Autohotkey 论坛的一些片段的帮助下,我使用 Autohotkey 制作了一个简单的计时器,
就像浏览器中许多网页上的页面加载栏一样,但对于 Windows.
现在它按预期工作,具有以下功能:
- 留在屏幕顶部
- 占用很小的屏幕Space(仅 4px 高度)
- Clik Through 和 Transasparent(不会阻止我将鼠标悬停在右上角以关闭 window)
- 很简单,只需将.ahk代码更改为配置颜色、时间、大小等即可
但是,我注意到当透明度设置为 100 时,总是有灰色透明背景,
Gray backound of progress bar
有人知道我可以调整任何参数以使进度条没有背景吗?
此简单计时器的完整自动热键代码:
#Persistent
WinTitle = toptimer
Gui,New,hwndMyGui
global MyProgress
; 30 minutes
time := 30 * 60 * 1000
tick:=A_TickCount+time
Gui, +E0x20 -Caption +AlwaysOnTop +Owner +LastFound
; Gui, -Caption +AlwaysOnTop +Owner +LastFound
WinSet, Transparent, 100
; Gui,Margin,0,0
Gui,Margin,-1,-1
Gui,Add,Progress,w1920 h4 cbFF0000 Range%A_TickCount%-%tick% vMyProgress
; Gui,Show,NA
Gui, Show, x0 y0 w%A_ScreenWidth%
While A_TickCount<=tick {
GuiControl,,MyProgress,% A_TickCount
Sleep 16
}
Gui,Destroy
ExitApp
感谢@0x464e 的好建议,
现在我只画一个颜色的图形用户界面并改变它的宽度
#Persistent
Gui,New,hwndMyGui
time := 1 * 60 * 1000
tick:=A_TickCount+time
Gui, +E0x20 -Caption +AlwaysOnTop +Owner +LastFound
WinSet, Transparent, 100
Gui, Color, FF0000
While A_TickCount<=tick {
width0 := A_ScreenWidth * (1 - (tick - A_TickCount)/time)
Gui, Show, x0 y0 w%width0% h5
Sleep 16
}
Gui,Destroy
ExitApp
这样代码就更简单了,后台也没有了。
但是虽然这个计时器是运行,但鼠标左键没有右功能,点击资源管理器右上角Minimize/Restore/Close也没有功能。
但是 vscode 的 Minimize/Restore/Close 按钮工作正常。
关闭计时器后,一切正常。
有人帮忙弄清楚为什么会这样。
出现此问题是因为您的 Gui, Show
命令每次都会激活 window。
添加 NA
(docs) 选项来摆脱这个。
或者,您可以使用 WinMove
(docs) 来调整 window.
的大小
在这种情况下,您还需要使用 SetWinDelay
(docs) 来消除 WinMove
命令后发生的延迟。
我不确定哪种方法更好,不能要求我打开 AHK 源代码看看这两者之间到底有什么区别。如果你足够关心(并且足够了解C/C++)一定要看一看。
以下是两种方法的修订脚本:
time := 1 * 60 * 1000
tick := A_TickCount + time
Gui, +E0x20 -Caption +AlwaysOnTop +Owner +LastFound
WinSet, Transparent, 100
Gui, Color, FF0000
While (A_TickCount <= tick)
{
width0 := A_ScreenWidth * (1 - (tick - A_TickCount) / time)
Gui, Show, x0 y0 w%width0% h5 NA
Sleep, 16
}
ExitApp
SetWinDelay, 0
time := 1 * 60 * 1000
tick := A_TickCount + time
Gui, +E0x20 -Caption +AlwaysOnTop +Owner +LastFound
WinSet, Transparent, 100
Gui, Color, FF0000
Gui, Show, y0 x0 h5
While (A_TickCount <= tick)
{
width0 := A_ScreenWidth * (1 - (tick - A_TickCount) / time)
WinMove, , , , , % width0
Sleep, 16
}
ExitApp
在 Autohotkey 论坛的一些片段的帮助下,我使用 Autohotkey 制作了一个简单的计时器, 就像浏览器中许多网页上的页面加载栏一样,但对于 Windows.
现在它按预期工作,具有以下功能:
- 留在屏幕顶部
- 占用很小的屏幕Space(仅 4px 高度)
- Clik Through 和 Transasparent(不会阻止我将鼠标悬停在右上角以关闭 window)
- 很简单,只需将.ahk代码更改为配置颜色、时间、大小等即可
但是,我注意到当透明度设置为 100 时,总是有灰色透明背景,
Gray backound of progress bar
有人知道我可以调整任何参数以使进度条没有背景吗?
此简单计时器的完整自动热键代码:
#Persistent
WinTitle = toptimer
Gui,New,hwndMyGui
global MyProgress
; 30 minutes
time := 30 * 60 * 1000
tick:=A_TickCount+time
Gui, +E0x20 -Caption +AlwaysOnTop +Owner +LastFound
; Gui, -Caption +AlwaysOnTop +Owner +LastFound
WinSet, Transparent, 100
; Gui,Margin,0,0
Gui,Margin,-1,-1
Gui,Add,Progress,w1920 h4 cbFF0000 Range%A_TickCount%-%tick% vMyProgress
; Gui,Show,NA
Gui, Show, x0 y0 w%A_ScreenWidth%
While A_TickCount<=tick {
GuiControl,,MyProgress,% A_TickCount
Sleep 16
}
Gui,Destroy
ExitApp
感谢@0x464e 的好建议,
现在我只画一个颜色的图形用户界面并改变它的宽度
#Persistent
Gui,New,hwndMyGui
time := 1 * 60 * 1000
tick:=A_TickCount+time
Gui, +E0x20 -Caption +AlwaysOnTop +Owner +LastFound
WinSet, Transparent, 100
Gui, Color, FF0000
While A_TickCount<=tick {
width0 := A_ScreenWidth * (1 - (tick - A_TickCount)/time)
Gui, Show, x0 y0 w%width0% h5
Sleep 16
}
Gui,Destroy
ExitApp
这样代码就更简单了,后台也没有了。 但是虽然这个计时器是运行,但鼠标左键没有右功能,点击资源管理器右上角Minimize/Restore/Close也没有功能。
但是 vscode 的 Minimize/Restore/Close 按钮工作正常。
关闭计时器后,一切正常。
有人帮忙弄清楚为什么会这样。
出现此问题是因为您的 Gui, Show
命令每次都会激活 window。
添加 NA
(docs) 选项来摆脱这个。
或者,您可以使用 WinMove
(docs) 来调整 window.
的大小
在这种情况下,您还需要使用 SetWinDelay
(docs) 来消除 WinMove
命令后发生的延迟。
我不确定哪种方法更好,不能要求我打开 AHK 源代码看看这两者之间到底有什么区别。如果你足够关心(并且足够了解C/C++)一定要看一看。
以下是两种方法的修订脚本:
time := 1 * 60 * 1000
tick := A_TickCount + time
Gui, +E0x20 -Caption +AlwaysOnTop +Owner +LastFound
WinSet, Transparent, 100
Gui, Color, FF0000
While (A_TickCount <= tick)
{
width0 := A_ScreenWidth * (1 - (tick - A_TickCount) / time)
Gui, Show, x0 y0 w%width0% h5 NA
Sleep, 16
}
ExitApp
SetWinDelay, 0
time := 1 * 60 * 1000
tick := A_TickCount + time
Gui, +E0x20 -Caption +AlwaysOnTop +Owner +LastFound
WinSet, Transparent, 100
Gui, Color, FF0000
Gui, Show, y0 x0 h5
While (A_TickCount <= tick)
{
width0 := A_ScreenWidth * (1 - (tick - A_TickCount) / time)
WinMove, , , , , % width0
Sleep, 16
}
ExitApp