Софт tab glich macro - Имитация табглича путем заморозки процесса!

Krip

Участник
Автор темы
34
9
Process Freeze Macro​

Основные фичи:
  • Автоматический поиск процессов: Скрипт сам сканирует запущенные в системе .exe файлы и предлагает их в выпадающем списке (по умолчанию подставляется RobloxPlayerBeta.exe).
  • Назначение клавиш кликом (Hotkey): Больше не нужно вводить названия кнопок текстом. Просто кликайте в поле интерфейса и нажимайте нужную клавишу на клавиатуре или мыши!
  • Поддержка комбинаций (Combo Бинд): Можно настроить активацию макроса как на одну клавишу, так и на комбинацию из двух кнопок (например, G + 1).
  • Режим удержания (Hold Mode): При включении этой галочки игра заморожена ровно столько, сколько вы физически удерживаете клавишу активации. При этом настройки КД автоматически блокируются за ненадобностью.
  • Кастомизация интерфейса: Можно прямо в GUI включить/выключить марку статуса в углу экрана, а также зеленую полосу прогресса перезарядки (Cooldown) по центру.
  • Кастомные системные бинды: Возможность переназначить кнопку Вкл/Выкл макроса и клавишу экстренной разморозки (по умолчанию F3).

Требования для работы:
Для работы скрипта требуется установленный AutoHotkey версии v1.1 (Unicode 32 или 64-bit). На версии AHK v2.0 скрипт работать не будет.

ВАЖНО (Экстренная кнопка):
Если во время тестов в режиме удержания или обычного фриза у вас намертво зависла игра — нажмите клавишу экстренного выхода (по умолчанию F3). Скрипт автоматически пошлет системе сигнал NtResumeProcess, мгновенно отпустит игру и завершит свою работу, предотвращая вылет процесса.

Инструкция по установке:
1. Установите AutoHotkey v1.1, если он еще не установлен.
2. Создайте новый текстовый файл, вставьте в него код скрипта и сохраните с расширением .ahk (или скачайте вложения к теме).
3. Запустите скрипт, настройте параметры под себя в открывшемся окне и нажмите кнопку "ЗАПУСТИТЬ".


tab glich macro:
#SingleInstance Force
#NoEnv
SetBatchLines, -1
ListLines Off

; --- ДЕФОЛТНЫЕ НАСТРОЙКИ ---
global TargetProcess := "RobloxPlayerBeta.exe"
global FreezeDuration := 50                   
global ActivationKey := "q"                   ; Первая клавиша макроса
global ActivationKey2 := ""                   ; Вторая клавиша макроса (если есть комбинация)
global ToggleKey := "Numpad1" 
global KillKey := "F3"       
global ResumeDelay := 535                     
global CooldownDuration := 2000               
global LastUseTime := 0                       
global IsMacroEnabled := true                 

; Флаги кастомизации интерфейса и логики
global UseCooldown := true
global ShowCooldownBar := true
global ShowStatusHud := true
global IsHoldMode := false

; --- СБОР СПИСКА ЗАПУЩЕННЫХ ПРОЦЕССОВ ---
ProcessList := ""
for process in ComObjGet("winmgmts:").ExecQuery("Select Name from Win32_Process") {
    if (process.Name != "" && !InStr(ProcessList, process.Name))
        ProcessList .= process.Name "|"
}
Sort, ProcessList, D|

; --- СОЗДАНИЕ ГЛАВНОГО ОКНА НАСТРОЕК (GUI) ---
Gui, SettingsGui: New, , Настройки Фриз-Макроса
Gui, SettingsGui: +AlwaysOnTop -MinimizeBox -MaximizeBox
Gui, SettingsGui: Font, s10, Verdana

; 1. Выбор процесса
Gui, SettingsGui: Add, Text, w330 y10, 1. Выберите процесс (или введите вручную):
Gui, SettingsGui: Add, ComboBox, vGuiProcess w330, %ProcessList%
GuiControl, SettingsGui: ChooseString, GuiProcess, %TargetProcess%

; 2. Время заморозки
Gui, SettingsGui: Add, Text, w330 y+15, 2. Время заморозки процесса (в мс):
Gui, SettingsGui: Add, Edit, vGuiFreezeTime w100, %FreezeDuration%

; 3. Управление горячими клавишами через элементы Hotkey (нажатием)
Gui, SettingsGui: Add, Text, w330 y+15, 3. Настройка клавиш (кликните в поле и нажмите клавишу):
Gui, SettingsGui: Add, Text, w180 y+5, Клавиша активации (1):
Gui, SettingsGui: Add, Hotkey, vGuiKey w120 x+10 yp-3, %ActivationKey%

Gui, SettingsGui: Add, Text, w180 x15 y+10, Клавиша активации (2) [Опция]:
Gui, SettingsGui: Add, Hotkey, vGuiKey2 w120 x+10 yp-3, %ActivationKey2%
Gui, SettingsGui: Font, s8 cGray
Gui, SettingsGui: Add, Text, w330 x15 y+2, (Для комбо типа G+1. Если не нужно — оставьте пустым)
Gui, SettingsGui: Font, s10 cBlack

Gui, SettingsGui: Add, Text, w180 x15 y+10, Вкл/Выкл макроса:
Gui, SettingsGui: Add, Hotkey, vGuiToggleKey w120 x+10 yp-3, %ToggleKey%

Gui, SettingsGui: Add, Text, w180 x15 y+10, Экстренный выход (F3):
Gui, SettingsGui: Add, Hotkey, vGuiKillKey w120 x+10 yp-3, %KillKey%

; 4. Настройки КД, Удержания и Интерфейса
Gui, SettingsGui: Add, Text, w330 x15 y+20, 4. Настройка КД и отображения:
Gui, SettingsGui: Add, CheckBox, vGuiHoldMode gToggleHoldMode w330 y+5, Режим удержания (заморозка пока держишь)

Gui, SettingsGui: Add, CheckBox, vGuiUseCooldown Checked gToggleCooldown w150 y+10, Использовать КД
Gui, SettingsGui: Add, Edit, vGuiCooldownTime w80 x+10 yp-3, %CooldownDuration%
Gui, SettingsGui: Add, Text, x+5 yp+3, мс

Gui, SettingsGui: Add, CheckBox, vGuiShowCooldownBar Checked w330 x15 y+10, Показывать зеленую полосу КД на экране
Gui, SettingsGui: Add, CheckBox, vGuiShowStatusHud Checked w330 y+5, Показывать марку (статус) слева вверху

; Кнопка запуска
Gui, SettingsGui: Font, s11 w700
Gui, SettingsGui: Add, Button, gSubmitSettings w160 x95 y+25 Default, ЗАПУСТИТЬ
Gui, SettingsGui: Show, w350 h520, Настройка макроса
WinWaitClose, Настройка макроса
goto StartMacro

; Обработка включения режима удержания (Блокирует и КД, и время заморозки)
ToggleHoldMode:
    Gui, Submit, NoHide
    if (GuiHoldMode) {
        GuiControl, SettingsGui: Disable, GuiFreezeTime
        GuiControl, SettingsGui:, GuiUseCooldown, 0
        GuiControl, SettingsGui: Disable, GuiUseCooldown
        GuiControl, SettingsGui: Disable, GuiCooldownTime
        GuiControl, SettingsGui:, GuiShowCooldownBar, 0
        GuiControl, SettingsGui: Disable, GuiShowCooldownBar
    } else {
        GuiControl, SettingsGui: Enable, GuiFreezeTime 
        GuiControl, SettingsGui: Enable, GuiUseCooldown
        GuiControl, SettingsGui:, GuiUseCooldown, 1
        GuiControl, SettingsGui: Enable, GuiCooldownTime
        GuiControl, SettingsGui: Enable, GuiShowCooldownBar
        GuiControl, SettingsGui:, GuiShowCooldownBar, 1
    }
return

; Включение/выключение поля ввода КД вручную
ToggleCooldown:
    Gui, Submit, NoHide
    if (GuiUseCooldown)
        GuiControl, SettingsGui: Enable, GuiCooldownTime
    else
        GuiControl, SettingsGui: Disable, GuiCooldownTime
return
; Действие при нажатии "ЗАПУСТИТЬ"
SubmitSettings:
    Gui, Submit, NoHide
    
    if (GuiProcess != "")
        TargetProcess := GuiProcess
    if (GuiFreezeTime + 0 > 0)
        FreezeDuration := GuiFreezeTime
        
    ; Считываем клавиши из полей ввода
    ActivationKey := GuiKey
    ActivationKey2 := GuiKey2
    ToggleKey := GuiToggleKey
    KillKey := GuiKillKey

    IsHoldMode := GuiHoldMode
    
    if (IsHoldMode) {
        UseCooldown := false
        ShowCooldownBar := false
    } else {
        UseCooldown := GuiUseCooldown
        if (GuiCooldownTime + 0 > 0)
            CooldownDuration := GuiCooldownTime
        ShowCooldownBar := GuiShowCooldownBar
    }

    ShowStatusHud := GuiShowStatusHud
    Gui, SettingsGui: Destroy
return

SettingsGuiGuiClose:
    ExitApp

MatchKeyFormat(key) {
    StringLower, key, key
    return Trim(key)
}

; --- СТАРТ РАБОТЫ СКРИПТА ---
StartMacro:
; Назначаем динамические горячие клавиши
if (ActivationKey2 != "") {
    ; Если задана комбинация из двух клавиш, используем кастомную связку
    Hotkey, ~%ActivationKey% & %ActivationKey2%, TriggerMacro, On
    BindInfo := ActivationKey " + " ActivationKey2
} else {
    ; Обычная одиночная клавиша
    Hotkey, ~%ActivationKey%, TriggerMacro, On
    BindInfo := ActivationKey
}

Hotkey, %ToggleKey%, ToggleMacroStatus, On
Hotkey, %KillKey%, EmergencyExit, On

; Индикатор марки статуса
if (ShowStatusHud) {
    Gui, StatusHud: +AlwaysOnTop -Caption +LastFound +Owner +E0x20
    Gui, StatusHud: Color, Black
    Gui, StatusHud: Font, s12 w700, Verdana
    
    StatusTextStr := IsHoldMode ? "[ БИНД: " BindInfo " (HOLD) | ON ]" : "[ БИНД: " BindInfo " | ON ]"
    Gui, StatusHud: Add, Text, vStatusText cGreen, %StatusTextStr%
    WinSet, TransColor, Black
    Gui, StatusHud: Show, x50 y50 NoActivate
}

; Индикатор полосы КД
if (ShowCooldownBar) {
    Gui, CooldownTextHud: +AlwaysOnTop -Caption +LastFound +Owner +E0x20
    Gui, CooldownTextHud: Color, Black
    Gui, CooldownTextHud: Font, s16 w900 cWhite, Verdana
    Gui, CooldownTextHud: Add, Text, vCooldownDisplay Center w200, % Format("{:0.2f}", CooldownDuration / 1000)
    WinSet, TransColor, Black
    Gui, CooldownTextHud: Show, xCenter y620 w200 h35 NoActivate Hide

    Gui, CooldownBarHud: +AlwaysOnTop -Caption +LastFound +Owner +E0x20
    Gui, CooldownBarHud: Color, 0x00FF00
    Gui, CooldownBarHud: Show, xCenter y660 w200 h7 NoActivate Hide
}
return


; --- ОБРАБОТЧИКИ ГОРЯЧИХ КЛАВИШ ---

; Быстрое включение / выключение макроса
ToggleMacroStatus:
    IsMacroEnabled := !IsMacroEnabled
    BindInfo := ActivationKey2 != "" ? ActivationKey " + " ActivationKey2 : ActivationKey
    if (IsMacroEnabled) {
        if (ShowStatusHud) {
            StatusTextStr := IsHoldMode ? "[ БИНД: " BindInfo " (HOLD) | ON ]" : "[ БИНД: " BindInfo " | ON ]"
            GuiControl, StatusHud: +cGreen, StatusText
            GuiControl, StatusHud:, StatusText, %StatusTextStr%
        }
        SoundBeep, 1000, 100
        if (ActivationKey2 != "")
            Hotkey, ~%ActivationKey% & %ActivationKey2%, On
        else
            Hotkey, ~%ActivationKey%, On
    } else {
        if (ShowStatusHud) {
            GuiControl, StatusHud: +cRed, StatusText
            GuiControl, StatusHud:, StatusText, [ OFF ]
        }
        SoundBeep, 500, 100
        if (ActivationKey2 != "")
            Hotkey, ~%ActivationKey% & %ActivationKey2%, Off
        else
            Hotkey, ~%ActivationKey%, Off
            
        if (ShowCooldownBar) {
            Gui, CooldownBarHud: Hide
            Gui, CooldownTextHud: Hide
        }
    }
return

; Метка активации макроса
TriggerMacro:
if (!IsMacroEnabled)
    return

; Проверка обычного КД
if (UseCooldown) {
    if (A_TickCount - LastUseTime < CooldownDuration)
        return
}

LastUseTime := A_TickCount

; --- ЛОГИКА РАБОТЫ МАКРОСА ---
if (IsHoldMode) {
    SuspendProcess(TargetProcess)
    
    ; Поддержка удержания как для комбо, так и для одиночной клавиши
    Loop {
        if (!IsMacroEnabled)
            break
            
        ; Проверяем, зажаты ли клавиши
        Key1State := GetKeyState(ActivationKey, "P")
        Key2State := (ActivationKey2 != "") ? GetKeyState(ActivationKey2, "P") : true
        
        ; Если хоть одна клавиша из бинда отпущена — выходим из цикла
        if (!Key1State || !Key2State)
            break
            
        Sleep, 10
    }
    
    ResumeProcess(TargetProcess)
} else {
    SuspendProcess(TargetProcess)
    if (ShowCooldownBar)
        SetTimer, StartCooldownVisuals, -1
    SetTimer, AutoResumeProcess, -%ResumeDelay%
}
return

AutoResumeProcess:
    ResumeProcess(TargetProcess)
return

StartCooldownVisuals:
    Gui, CooldownBarHud: Show, NoActivate
    Gui, CooldownTextHud: Show, NoActivate
    StartTime := A_TickCount
    Loop
    {
        if (!IsMacroEnabled)
            break
        ElapsedTime := A_TickCount - StartTime
        if (ElapsedTime >= CooldownDuration)
            break
            
        RemainingTime := (CooldownDuration - ElapsedTime) / 1000
        FormattedTime := Format("{:0.2f}", RemainingTime)
        NewBarWidth := 200 - (200 * (ElapsedTime / CooldownDuration))
        
        GuiControl, CooldownTextHud:, CooldownDisplay, %FormattedTime%
        Gui, CooldownBarHud: Show, w%NewBarWidth% NoActivate
        Sleep, 15
    }
    Gui, CooldownBarHud: Hide
    Gui, CooldownTextHud: Hide
return

EmergencyExit:
    ResumeProcess(TargetProcess)
    ExitApp


; --- ФУНКЦИИ WIN32 API ---
SuspendProcess(ExeName) {
    Process, Exist, %ExeName%
    if !(_Pid := ErrorLevel)
        return
    _Handle := DllCall("OpenProcess", "uInt", 0x1F0FFF, "Int", 0, "Int", _Pid)
    DllCall("ntdll.dll\NtSuspendProcess", "Int", _Handle)
    DllCall("CloseHandle", "Int", _Handle)
}

ResumeProcess(ExeName) {
    Process, Exist, %ExeName%
    if !(_Pid := ErrorLevel)
        return
    _Handle := DllCall("OpenProcess", "uInt", 0x1F0FFF, "Int", 0, "Int", _Pid)
    DllCall("ntdll.dll\NtResumeProcess", "Int", _Handle)
    DllCall("CloseHandle", "Int", _Handle)
}
 

Вложения

  • tab glich macro.ahk
    11.9 KB · Просмотры: 0