0

I made a simple timer using Autohotkey with the help of some snippets from the Autohotkey forum, Like the page loading bar on many of the web pages in browser, but for Windows.

Now it work as expected, with those features:

  • Stay on top of the Screen
  • Take up very little Screen Space (4px height only)
  • Clik Through and Tranasparent (won't stop me from mouse over top right corner to close a window)
  • Simple enough, just change the .ahk code to config color, time, size etc.

But, I notice while transparency been set to 100, there alway be a gray transparent background,

Gray backound of progress bar

Some one know any parameter I can tweak to make the progress bar without background ?

Full Autohotkey code here for this simple timer:

#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

Thanks @0x464e for nice suggestion,

Now I just draw a single color gui and change it's width

#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

That made the code even simpler, and the background is gone. But while this timer is running, the left mouse button is not function right, clicking on explorer's top right Minimize/Restore/Close is not work.

But the Minimize/Restore/Close button of vscode is working fine.

After quit the timer, everything just work fine.

Some one help to figure out why that happens.

Jindi Li
  • 55
  • 2
  • 9
  • I'd assume you'd have to add in a custom progress control. And that's quite complicated if you'd even find a fitting custom control. Instead maybe just ditch the whole progress bar and just draw a single color gui? Just change the gui's width to indicate progress. – 0x464e Jan 12 '21 at 10:09
  • Nice suggestion, I'll try that now. – Jindi Li Jan 12 '21 at 14:22

1 Answers1

0

The problem occurs because your Gui, Show command activates the the window each time.
Add the NA(docs) option to get rid of this.

Alternatively, you could use e.g WinMove(docs) to resize the window.
In that case you'll also need to use SetWinDelay(docs) to remove the delay that happens after a WinMove command.

I'm not sure which approach is better, I can't be asked to open up the AHK source to see what exactly is the difference between these two. If you care enough (and understand C/C++ well enough) be sure to take a look.
Here are the revised scripts for both approaches:

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
0x464e
  • 5,948
  • 1
  • 12
  • 17
  • Thanks @0x464e, Both works right. Almost use the same CPU and same memory, So, either one is great to use. Technical Difference between these two not so important to me, maybe check that at a later time. – Jindi Li Jan 12 '21 at 16:42