#SingleInstance, force CoordMode, Mouse, Screen waittime := 180000 Switch A_Args[1] { Case "on": Menu, Tray, NoIcon Goto, Start Case "off": ExitApp } Menu, Tray, Add, Hide GUI, GuiToggle ; Adds a button to toggle the gui Menu, Tray, Add, Exit, GuiClose ; Exit button Menu, Tray, NoStandard ; None of the standard tray buttons Gui, +AlwaysOnTop +ToolWindow Gui, Add, Button, x3 y3 w55 h20 gStart +Center, Start Gui, Add, Button, x3 y3 w55 h20 gStop +Center, Stop Gui, Show, h28 w60, msmv GuiControl, Hide, Stop ; Since we want the Start button to show first Return Start: GuiControl, Hide, Start SetTimer, Msmv, %waittime% ; Checks if the has been input in the last 2 minutes every 30 secs, easier to stop a loop with SetTimer GuiControl, Show, Stop Return Stop: GuiControl, Hide, Stop SetTimer, Msmv, off GuiControl, Show, Start Return Msmv: If (A_TimeIdle > waittime) ; https://www.autohotkey.com/docs/Variables.htm#User_Idle_Time { Random, x,, %A_ScreenWidth% Random, y,, %A_ScreenHeight% MouseMove %x%, %y% } Return GuiToggle: If !nogui { Gui, Hide Menu, Tray, Check, Hide GUI nogui := True } Else { Menu, Tray, uncheck, Hide GUI nogui := False Gui, Show } Return GuiClose: GuiEscape: ExitApp ; Closes the app when escape or the exit button is pressed