Первый выпуск SysDevCleaner
Анализ 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>
This commit is contained in:
46
sysdevcleaner/__main__.py
Normal file
46
sysdevcleaner/__main__.py
Normal file
@@ -0,0 +1,46 @@
|
||||
"""Точка входа: `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())
|
||||
Reference in New Issue
Block a user