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