autoPriority
Windows-утилита для управления приоритетами процессов по расходу оперативной памяти. Работает из одного EXE, без установки и службы.
Запуск и выход
Запустите autoPriority.exe. Первая проверка процессов выполняется при запуске, последующие — через заданный интервал, по умолчанию раз в минуту.
Значок в трее открывает меню с пунктом «Выход» по левой, правой, средней или дополнительной кнопке мыши. Меню доступно и с клавиатуры. При выходе программа останавливает проверки, восстанавливает доступные для восстановления приоритеты и убирает значок. Консольная сборка также поддерживает Ctrl+C.
В одном сеансе Windows работает один экземпляр. Повторный запуск завершается, не затрагивая работающий экземпляр и его журнал. Программа не настраивает автозапуск и не запрашивает повышение прав.
Как назначаются приоритеты
Порог памяти применяется к рабочему набору процесса (RSS).
| Режим и условие | Приоритет |
|---|---|
Обычный режим: RSS не меньше -mem |
HIGH |
Обычный режим: RSS меньше -mem, текущий приоритет выше NORMAL |
NORMAL |
Обычный режим: RSS меньше -mem, текущий приоритет NORMAL, BELOW_NORMAL или IDLE |
Без изменения |
Игровой режим: процесс достиг -game-mem |
HIGH |
| Игровой режим: остальные процессы | IDLE |
Игровой режим не распознаёт игры. Его может включить любой процесс, достигший -game-mem, в том числе браузер. Такой процесс остаётся участником режима до завершения, даже если расход памяти уменьшился. Если участников несколько, режим заканчивается после выхода последнего.
После окончания игрового режима программа снимает временное понижение и применяет обычные правила. При штатном выходе самой autoPriority она восстанавливает собственные изменения, включая повышения вне игрового режима. Замеченное внешнее изменение приоритета становится новой исходной точкой.
Параметры
| Флаг | По умолчанию | Описание |
|---|---|---|
-mem |
512M |
Обычный порог памяти: положительное целое число с необязательным суффиксом K/M/G |
-game-mem |
2G |
Порог игрового режима: больше -mem; 0 отключает режим |
-interval |
1m |
Интервал проверок; значения меньше 10 секунд ограничиваются 10 секундами |
-dry-run |
false |
Запись предполагаемых изменений в журнал без изменения приоритетов |
autoPriority.exe
autoPriority.exe -mem=1G -game-mem=4G -interval=30s
autoPriority.exe -game-mem=0
autoPriority.exe -dry-run
Журнал
Файл журнала находится во временной папке Windows: %TEMP%\autopriority.log. Путь определяется через os.TempDir.
При каждом запуске журнал очищается, архив предыдущей сессии удаляется. В текущей сессии сохраняются основной файл и один архив autopriority.log.1, каждый размером до 4 МиБ. Слишком длинная запись сокращается с отметкой.
Изменения выводятся ASCII-таблицей:
Процесс | PID | Память | Повышено | Понижено
При включении игрового режима его участники идут первыми, фоновые процессы — ниже. Уже установленный HIGH отмечается как «уже HIGH». Если изменить приоритет участника не удалось, его строка содержит отметку «в блоклисте».
Ошибки выводятся отдельным блоком «ОШИБКИ»:
Процесс | PID | Описание ошибки
Под таблицей нет дублирующих сообщений. Режим -dry-run явно помечает записи как план. При ошибке записи журнала программа завершает работу с попыткой восстановления приоритетов.
Блоклист
После ошибки чтения или изменения приоритета процесс попадает в блоклист. Повторных попыток для него нет, в том числе при выходе; остальные процессы обрабатываются независимо. Блоклист хранится в памяти и очищается при перезапуске autoPriority.
Если время создания доступно, блокировка привязана к PID и времени создания. Другой экземпляр с тем же PID обрабатывается отдельно. Если Windows запрещает даже чтение процесса, запись снимается при исчезновении PID из снимка либо смене имени или родителя. Замену недоступного процесса другим с тем же PID, именем и родителем между двумя снимками надёжно различить нельзя.
Процесс, доступный для чтения, но недоступный для изменения, может включать игровой режим по расходу памяти.
Ограничения
- Восстановление незаблокированного процесса выполняется один раз. Если Windows отказывает в доступе, программа сообщает о невосстановленных приоритетах.
- Принудительное завершение, сбой ОС или отключение питания не позволяют гарантировать восстановление.
- Между чтением и записью приоритета другая программа может изменить его значение.
- Наследованный дочерними процессами IDLE определяется по родству и времени создания. Это эвристика: она может затронуть явно заданный ребёнку IDLE и не обнаружить цепочку, если родитель завершился между проверками.
- Программа не обходит защиту процессов, не включает SeDebugPrivilege и не гарантирует совместимость с античитом или прирост FPS.
Сборка и проверки
Для сборки нужны Windows и Go 1.26 или новее. Сторонние Go-модули и CGO не требуются.
go build -trimpath -buildvcs=false -ldflags="-H=windowsgui -s -w -buildid=" -o autoPriority.exe .
go test ./...
go vet ./...
Для консольной сборки уберите -H=windowsgui.
Обычные тесты используют синтетические процессы. Нативные проверки включаются переменными окружения:
AP_NATIVE_PROCESSES=1: проверка Windows API только на специально созданных дочерних процессах.AP_NATIVE_GUI=1: проверка собственного значка и меню трея; может кратко переключить фокус.
Нативные тесты не запускают системный сканер программы. Запускайте их вне защищённой игры.
Иконки
Программа использует chart_bar_edit для трея и cross для пункта «Выход». PNG встроены в EXE.
Silk 1.3, Mark James, Creative Commons Attribution 2.5.
- Автор: http://www.famfamfam.com/lab/icons/silk/
- Источник: https://github.com/legacy-icons/famfamfam-silk
- Ревизия:
d6056f5c28e46c28403888ab7c013aced3928ec8. - Лицензия и контрольные суммы:
assets/SILK-LICENSE.md,assets/SILK-SOURCE.json.