У меня есть приложение, которое работает в Windows во время сеанса пользователя, и я не хочу, чтобы пользователь мог случайно закрыть его.
Пользователь может закрыть его, сохранив несохраненные данные (например, в блокноте) и запустив процесс выхода из системы. Блокнот отклоняет сообщение WM_QUERYSESSION; Windows подсказывает пользователю, что есть несохраненные данные; и пользователь получает возможность отменить выход из системы.
Другие приложения (включая мое) получают WM_QUERYSESSION, отвечают TRUE, затем получают WM_ENDSESSION и выходят. Важно отметить, что они закрылись до того, как Windows решила уведомить пользователя о несохраненных данных в блокноте.
Если пользователь отменяет выход из системы, конечный результат состоит в том, что сеанс пользователя продолжается без всех процессов, которые обрабатывали сообщения о завершении сеанса.
Я пытаюсь найти способ сделать так, чтобы мой процесс работал до тех пор, пока мы не достигнем точки, когда пользователь может отменить выход из системы. Глядя на документы Microsoft по этому вопросу, я не вижу очевидного способа сделать это - каждый процесс проходит свою собственную WM_QUERYSESSION> WM_ENDSESSION, и документы явно указывают, что это происходит для каждого приложения независимо.
Я не хочу отвечать на WM_QUERYSESSION с помощью FALSE, поскольку я не хочу сам блокировать выход из системы, просто продолжайте работу, если что-то еще блокирует его.
Существуют ли другие способы выяснить, когда Windows решила, что на все сообщения WM_QUERYSESSION были даны ответы с ИСТИНОЙ, а выход из системы неизбежен?
(Я думаю, что это вопрос Windows, а не вопрос, специфичный для языка, который я использую, но в случае, если это важно, это PureBasic. Любой подход Win32 API должен быть работоспособным.)