#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