112 lines
9.6 KiB
Markdown
112 lines
9.6 KiB
Markdown
# 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` | Запись предполагаемых изменений в журнал без изменения приоритетов |
|
|
|
|
```text
|
|
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-таблицей:
|
|
|
|
```text
|
|
Процесс | PID | Память | Повышено | Понижено
|
|
```
|
|
|
|
При включении игрового режима его участники идут первыми, фоновые процессы — ниже. Уже установленный HIGH отмечается как «уже HIGH». Если изменить приоритет участника не удалось, его строка содержит отметку «в блоклисте».
|
|
|
|
Ошибки выводятся отдельным блоком «ОШИБКИ»:
|
|
|
|
```text
|
|
Процесс | PID | Описание ошибки
|
|
```
|
|
|
|
Под таблицей нет дублирующих сообщений. Режим `-dry-run` явно помечает записи как план. При ошибке записи журнала программа завершает работу с попыткой восстановления приоритетов.
|
|
|
|
## Блоклист
|
|
|
|
После ошибки чтения или изменения приоритета процесс попадает в блоклист. Повторных попыток для него нет, в том числе при выходе; остальные процессы обрабатываются независимо. Блоклист хранится в памяти и очищается при перезапуске autoPriority.
|
|
|
|
Если время создания доступно, блокировка привязана к PID и времени создания. Другой экземпляр с тем же PID обрабатывается отдельно. Если Windows запрещает даже чтение процесса, запись снимается при исчезновении PID из снимка либо смене имени или родителя. Замену недоступного процесса другим с тем же PID, именем и родителем между двумя снимками надёжно различить нельзя.
|
|
|
|
Процесс, доступный для чтения, но недоступный для изменения, может включать игровой режим по расходу памяти.
|
|
|
|
## Ограничения
|
|
|
|
- Восстановление незаблокированного процесса выполняется один раз. Если Windows отказывает в доступе, программа сообщает о невосстановленных приоритетах.
|
|
- Принудительное завершение, сбой ОС или отключение питания не позволяют гарантировать восстановление.
|
|
- Между чтением и записью приоритета другая программа может изменить его значение.
|
|
- Наследованный дочерними процессами IDLE определяется по родству и времени создания. Это эвристика: она может затронуть явно заданный ребёнку IDLE и не обнаружить цепочку, если родитель завершился между проверками.
|
|
- Программа не обходит защиту процессов, не включает SeDebugPrivilege и не гарантирует совместимость с античитом или прирост FPS.
|
|
|
|
## Сборка и проверки
|
|
|
|
Для сборки нужны Windows и Go 1.26 или новее. Сторонние Go-модули и CGO не требуются.
|
|
|
|
```text
|
|
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`.
|