Загрузка данных


#NoEnv
#SingleInstance Force
SetWorkingDir %A_ScriptDir%
SetWinDelay, -1

IsRunning := false

; Построение графического интерфейса (GUI)
Gui, Add, Text, x10 y10 w300 h20, Выберите окна Roblox для Anti-AFK:
Gui, Add, Button, x220 y5 w90 h25 gRefreshWindows, Обновить список

Loop, 10 {
    posY := 30 + (A_Index * 25)
    Gui, Add, Checkbox, x15 y%posY% w290 h20 vWinCB%A_Index% Hidden, Window
}

Gui, Add, Text, x10 y310 w110 h20, Интервал (секунды):
Gui, Add, Edit, x120 y307 w60 h20 vIntervalNumber Number, 60
Gui, Add, Button, x10 y340 w300 h35 vStartBtn gToggleAntiAFK, ЗАПУСТИТЬ ANTI-AFK

Gui, Show, w320 h390, Roblox Anti-AFK Control
GoSub, RefreshWindows
return

; Функция обновления списка окон
RefreshWindows:
    WinGet, robloxIDs, List, ahk_exe RobloxPlayerBeta.exe
    
    Loop, 10 {
        GuiControl, Hide, WinCB%A_Index%
        GuiControl,, WinCB%A_Index%, 0
    }
    
    if (robloxIDs = 0) {
        GuiControl, Show, WinCB1
        GuiControl,, WinCB1, Roblox не найден!
        GuiControl, Disable, WinCB1
        return
    }
    
    Loop, %robloxIDs% {
        if (A_Index > 10)
            break
            
        this_id := robloxIDs%A_Index%
        WinGetTitle, this_title, ahk_id %this_id%
        if (this_title = "")
            this_title := "Roblox Client #" . A_Index
            
        GuiControl, Enable, WinCB%A_Index%
        GuiControl, Text, WinCB%A_Index%, %this_title% (ID: %this_id%)
        GuiControl, Show, WinCB%A_Index%
        GuiControl,, WinCB%A_Index%, 1
    }
return

; Переключатель Старт / Стоп
ToggleAntiAFK:
    Gui, Submit, NoHide
    
    if (IsRunning) {
        SetTimer, DoAntiAFK, Off
        IsRunning := false
        GuiControl,, StartBtn, ЗАПУСТИТЬ ANTI-AFK
        SoundBeep, 500, 200
    } else {
        if (IntervalNumber < 5) {
            MsgBox, 48, Ошибка, Интервал должен быть не менее 5 секунд!
            return
        }
        
        TimerMs := IntervalNumber * 1000
        SetTimer, DoAntiAFK, %TimerMs%
        IsRunning := true
        GuiControl,, StartBtn, ОСТАНОВИТЬ ANTI-AFK
        SoundBeep, 1000, 200
        
        GoSub, DoAntiAFK
    }
return

; Основной цикл кликов по окнам
DoAntiAFK:
    Gui, Submit, NoHide
    WinGet, robloxIDs, List, ahk_exe RobloxPlayerBeta.exe
    
    ; Запоминаем текущее активное окно
    active_win := WinActive("A")
    
    Loop, %robloxIDs% {
        if (A_Index > 10)
            break
            
        cbValue := WinCB%A_Index%
        if (cbValue = 1) {
            this_id := robloxIDs%A_Index%
            
            ; Передаем фокус окну через DLL (работает быстрее WinActivate)
            DllCall("SetForegroundWindow", "Ptr", this_id)
            Sleep, 60
            
            ; Делаем клик и физическое зажатие пробела
            Click, 100, 100
            Sleep, 40
            Send {Space down}
            Sleep, 60
            Send {Space up}
            Sleep, 40
        }
    }
    
    ; Возвращаем фокус на окно, где вы работали
    if (active_win)
        DllCall("SetForegroundWindow", "Ptr", active_win)
return

GuiClose:
ExitApp