Загрузка данных


Это абсолютно зрелое и правильное решение.

Настоящая консоль обязана поддерживать оба сценария:

Пассивный (выход из самой игры): Игрок нажал «Выход» в меню игры или Alt+F4 — лаунчер должен подхватить это за 0.05 секунды (без всяких задержек).

Активный (консольный оверлей): Игрок зажал кнопку PS / Xbox прямо во время геймплея — поверх выезжает фирменное Quick Menu PS4, где можно нажать «Закрыть игру» и выйти со 100% контролем анимации.

Давайте я подробно разложу всю логику и техническую архитектуру, как эти два механизма будут работать вместе как часы.

Часть 1. Как сделать выход из самой игры мгновенным (0.05 сек вместо 1.2 сек)
Почему раньше лагало:
Лаунчер крутил тяжелый цикл alive_pids() — опрашивал вообще все процессы Windows через psutil (это занимает 100–150 мс процессора) и ждал искусственные 5 тиков (1.0 секунду) «на всякий случай».

Новая архитектура мгновенного выхода:
В момент запуска, как только окно игры появилось, мы запоминаем его точный системный идентификатор (HWND — дескриптор окна).

Теперь лаунчеру больше не нужно сканировать весь компьютер через psutil.

В Windows есть системная микро-команда: user32.IsWindowVisible(game_hwnd). Она выполняется за 0.001 миллисекунды и практически не нагружает процессор.

Мы опрашиваем конкретно это окно каждые 40–50 миллисекунд:

Окно закрылось -> через 50 миллисекунд лаунчер уже знает об этом.

Лаунчер даёт микро-паузу всего в 100 миллисекунд (для человеческого глаза это абсолютно незаметно, быстрее моргания), чтобы отсечь случайное мерцание.

Итог: реакция на выход из игры сокращается с 1.2 секунды до 0.1 секунды (100 мс). Для человека это ощущается как строго моментальное действие.

Часть 2. Как устроен оверлей (Quick Menu по кнопке PS)
Это та самая фишка, за которую любят консоли. В main.py у нас уже есть чтение секретной функции Windows XInputGetStateEx (ординал 100), которая видит нажатие круглой светящейся кнопки Xbox / PS.

Логика работы Quick Menu:
Отслеживание удержания:

Во время игры фоновый поток лаунчера слушает кнопку Home/Guide.

Короткое нажатие игра может использовать сама, но если игрок удерживает кнопку 0.7 секунды — срабатывает триггер оверлея.

Появление меню поверх игры:

Окно игры не закрывается и не крашится (современные игры на Windows работают в Borderless/Flip-режиме).

С левого края экрана с красивой плавной анимацией выезжает полупрозрачная тёмно-синяя шторка — оригинальное Quick Menu PS4:

Сверху: иконка и название текущей игры (The Last of Us Part II).

Первый пункт: «Закрыть приложение» (Close Application).

Второй пункт: «Вернуться в игру» (Resume).

Действие «Закрыть приложение»:

Игрок нажимает Крестик (A).

Лаунчер сам мягко посылает игре сигнал закрытия (WM_CLOSE), а если игра зависла — принудительно гасит процесс.

На экране сразу включается наш фирменный каскад возврата в дашборд. Здесь лаг равен ровно 0.00 секунд, потому что выход инициирован самим лаунчером!

Действие «Вернуться в игру»:

Игрок нажал Круг (B) — шторка плавно уехала влево, фокус вернулся в игру, вы продолжаете играть.

Часть 3. Как обе системы дружат между собой (Единый автомат состояний)
Они идеально дополняют друг друга и не конфликтуют:

Plaintext
                           [ ИДЁТ ИГРА ]
                                 │
            ┌────────────────────┴────────────────────┐
            ▼                                         ▼
   [Игрок нажал Выход в игре]             [Игрок зажал кнопку PS]
            │                                         │
   Окно игры исчезло                     Выехало Quick Menu слева
   (реакция 0.1 сек)                     Нажал «Закрыть приложение»
            │                                         │
            └────────────────────┬────────────────────┘
                                 ▼
                     [ ЕДИНЫЙ ВЫХОД В ДАШБОРД ]
            • Фирменный звук возврата PS4
            • Плавный каскад всплытия плиток и спуска панели
            • Мягкое нарастание музыки библиотеки
Если игрок выходит по-старому через меню игры — срабатывает скоростной перехват за 0.1 сек. Если выходит по-консольному через оверлей — лаунчер сам режиссирует красивый выход без сучка и задоринки.

Что думаете по поводу такой связки? Если концепт ложится на ваше видение — я могу приступать к сборке этой архитектуры.