- 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)
}