#Requires AutoHotkey v2.0 ; v2 only #SingleInstance force CoordMode("Mouse", "Screen") waittime := 5000 ogcStop := 13 global nogui := False Switch A_Args { Case "on": Goto(Start) Case "off": ExitApp() default: for x in A_Args { MsgBox(x) } } myGui := Gui() A_TrayMenu.Delete() ; None of the standard tray buttons A_TrayMenu.Add("Hide GUI", GuiToggle()) ; Adds a button to toggle the gui A_TrayMenu.Add("Exit", ExtMen) ; Exit button myGui.Opt("+AlwaysOnTop +ToolWindow") ogcButtonStart := myGui.Add("Button", "x3 y3 w55 h20 +Center", "Start") ogcButtonStart.OnEvent("Click", Start.Bind("Normal")) ogcButtonStop := myGui.Add("Button", "x3 y3 w55 h20 +Center Hidden", "Stop") ogcButtonStop.OnEvent("Click", Stop.Bind("Normal")) myGui.Title := "msmv" myGui.Show("h28 w60") Start(A_GuiEvent, GuiCtrlObj, Info, *) { ogcButtonStart.Visible := false SetTimer(Msmv,waittime) ; Checks if the has been input in the last 2 minutes every 30 secs, easier to stop a loop with SetTimer ogcButtonStop.Visible := true } Stop(A_GuiEvent, GuiCtrlObj, Info, *) { ogcButtonStop.Visible := false SetTimer(Msmv,0) ogcButtonStart.Visible := true } Msmv() { If (A_TimeIdle > waittime) ; https://www.autohotkey.com/docs/Variables.htm#User_Idle_Time { x := Random(, A_ScreenWidth) y := Random(, A_ScreenHeight) MouseMove(x, y) } } GuiToggle(){ global If !nogui { myGui.Hide() A_TrayMenu.Check("1&") nogui := True } Else { A_TrayMenu.Uncheck("1&") nogui := False myGui.Show() } } ; exit option from tray menu ExtMen(A_ThisMenuItem, A_ThisMenuItemPos, MyMenu) { ExitApp() }