Как программе получить информацию, что её принудительно закрывают, например, через диспетчер задач?
Как программе получить информацию, что её принудительно закрывают
Сообщений 1 страница 10 из 10
Поделиться209.09.2025 00:04:50
Никак. Уверен, что Windows просто освобождает память блокируя взаимодействие с памятью выделенной программе, и с момента поступления команды на убийство программа не выполняет ничего. Эта команда не является нормальной работой программы, это вынужденная мера для зависших программ (и не важно что она не зависла, с ней будет тоже самое). Нормальной работой может быть событие завершения Windows, когда Windows высылает всем программа событие, что Windows завершает свою работу и даёт на это 20 секунд. Программист прописывает в программе что программа будет делать за это время, например сохраняет в ini-файл текущее состояние или сбрасывает кэш обработанных данных. Если не успеет, то с ней будет тоже что убийство, хотя при завершении Windows спрашивает хотите ли вы всё равно завершить, то есть последнее слово за вами, и Windows не ограничивает временем.
Поделиться311.09.2025 22:19:57
Спасибо за ответ. На самом деле требуется поймать завершение программы при выключени ОС. ОС просто закрывает программу и событие #PB_Event_CloseWindow не ловится.
Поделиться412.09.2025 01:55:54
помню что там есть какое-то событие... только забыл какое
примеры на старом компьютере. не под рукой. но точно есть какое-то событие, так как я такое делал.
Поделиться512.09.2025 18:42:54
https://learn.microsoft.com/en-us/windo … endsession
На сегодня кажется нужно разбираться с каждой версией windows отдельно.
Кстати например IDE PB не даёт завершить систему, если есть не сохранённые исходники, так что есть где поискать как это делается на PB.
...\Git\purebasic\PureBasicIDE\WindowsMisc.pb содержит #WM_QUERYENDSESSION в Procedure MainWindowCallback(Window, Message, wParam, lParam)
Отредактировано useful (12.09.2025 19:01:07)
Поделиться816.09.2025 17:38:05
https://www.purebasic.fr/english/viewtopic.php?t=78018
Это работает!
Поделиться916.09.2025 17:49:39
Это работает!
Это не принудительное закрытие. Попробуйте завершить через диспетчер задач и посмотрите узнает ли об этом приложение.
Поделиться1016.09.2025 20:03:25
Мне требовалось поймать момент завершения программы при завершении работы ОС. Изначально вопрос стоял иначе, т.к. я не подозревал, что существует разница