Как я могу различить различные способы завершения моей программы?
Я пишу программу для Windows, используя C++Builder 2007.
Когда моя программа закрыта, она должна вести себя по-разному в зависимости от того, как она была закрыта:
- Пользователь нажал "X" окна приложения: вернитесь к логину пользователя приложения.
- Программа завершается через TaskManager: прервите программу тут же. Это особенно важно, поскольку программа не должна блокировать закрытие Windows.
Получить один или другой легко: реализовать TForm::OnClose()
или же OnCloseQuery()
обрабатывать событие. Тем не менее, оба не дают мне понять, что вызвало событие. Есть ли другой способ узнать, что на самом деле вызвало событие закрытия?
1 ответ
Вы можете сделать свою основную форму lsiten к WM_SYSCOMMAND
сообщение. Если вы получаете это сообщение с типом команды SC_CLOSE
, затем вы знаете, что пользователь нажал кнопку закрытия, нажал Alt+F4 или выбрал "Закрыть" в системном меню. Затем вы можете делать все что угодно (вместо того, чтобы позволить действию по умолчанию закрыть форму).
Например, вы можете снова отобразить диалог входа в систему.
Это не повлияет на другие способы закрытия основной формы / приложения, поэтому вы все равно можете закрыть приложение из (первой вкладки) в диспетчере задач.
[Ранее этот Q был помечен как Delphi. Из-за этого первая версия моего ответа содержит реализацию этой идеи в Delphi.]