Анализ Windows и очистка кешей, мусора и остатков разработки. Ядро: - каталог правил: 228 правил путей (496 шаблонов) + 43 правила артефактов проектов — Windows, браузеры, кеши сборки, IDE, приложения, пакетные менеджеры; - рекурсивный поиск node_modules, target, build, __pycache__, .venv и т.п. с проверкой маркеров проекта, чтобы не ловить ложные срабатывания; - поиск крупных файлов и дубликатов (хеш по началу/середине/концу и полная сверка), инвентаризация установленных программ через реестр; - ограничение области сканирования по дискам; - рекомендации и текстовый отчёт. Безопасность: - четыре уровня риска, автоматически отмечается только «Безопасно»; - список защищённых путей проверяется и при выборе, и перед удалением; - для каталогов вроде %TEMP% удаляется содержимое, а не сам каталог; - удаление в Корзину по умолчанию, пробный запуск, журнал очисток. Интерфейс на Dear PyGui: - JetBrains Mono Nerd Font: кириллица и иконки в одном шрифте; - тёмная и светлая темы, адаптивная раскладка; - заголовок окна ставится через SetWindowTextW — Dear PyGui отдаёт его в ANSI-функцию как UTF-8 и портит кириллицу; - запуск всегда с правами администратора: манифест UAC в exe и самоперезапуск через ShellExecuteW при работе из исходников. Сборка в один exe через PyInstaller со вшитым шрифтом и значком. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
47 lines
1.8 KiB
Python
47 lines
1.8 KiB
Python
"""Точка входа: `python -m sysdevcleaner` открывает GUI, с аргументами — консоль."""
|
||
from __future__ import annotations
|
||
|
||
import sys
|
||
|
||
from .winui import NO_ELEVATE_ENV, ensure_admin, is_admin
|
||
|
||
|
||
def launch_gui(argv: list[str] | None = None) -> int:
|
||
"""Dear PyGui — основной интерфейс; tkinter остаётся запасным вариантом.
|
||
|
||
Перед запуском поднимаем права: без них недоступны Windows\\Temp, кеш
|
||
обновлений, Prefetch и Windows.old — а это обычно самая крупная добыча.
|
||
Отказ в UAC не фатален: приложение просто запустится с обычными правами
|
||
и честно скажет об этом в заголовке и шапке.
|
||
"""
|
||
if ensure_admin():
|
||
return 0 # работать дальше будет повышенная копия
|
||
|
||
try:
|
||
from .gui.app import main as gui_main
|
||
except ImportError as e:
|
||
print(f"Dear PyGui недоступен ({e}).", file=sys.stderr)
|
||
print("Установите его командой: python -m pip install dearpygui",
|
||
file=sys.stderr)
|
||
print("Пока запускаю запасной интерфейс на tkinter.", file=sys.stderr)
|
||
from .gui.app_tk import main as gui_main # type: ignore[assignment]
|
||
gui_main()
|
||
return 0
|
||
|
||
|
||
def main() -> int:
|
||
args = sys.argv[1:]
|
||
if not args:
|
||
return launch_gui()
|
||
if args == ["--gui"]:
|
||
return launch_gui([])
|
||
from .cli import main as cli_main
|
||
return cli_main()
|
||
|
||
|
||
__all__ = ["main", "launch_gui", "is_admin", "NO_ELEVATE_ENV"]
|
||
|
||
|
||
if __name__ == "__main__":
|
||
raise SystemExit(main())
|