Как я могу различить различные способы завершения моей программы?

Я пишу программу для Windows, используя C ++ Builder 2007.

Когда моя программа закрыта, она должна вести себя по-разному в зависимости от того, как она была закрыта:

  1. Пользователь нажал «X» в окне приложения: вернитесь к логину пользователя приложения.
  2. Программа завершается через TaskManager: прервите программу тут же. Это особенно важно, поскольку программа не должна блокировать закрытие Windows.

Получить один или другой легко: реализовать TForm::OnClose() или же OnCloseQuery() обрабатывать событие. Тем не менее, оба не дают мне понять, что вызвало событие. Есть ли другой способ узнать, что на самом деле вызвало событие закрытия?

0

Решение

Вы можете сделать свою основную форму lsiten к WM_SYSCOMMAND сообщение. Если вы получили это сообщение с типом команды SC_CLOSEзатем вы знаете, что пользователь нажал кнопку закрытия, нажал Alt + F4 или выбрал «Закрыть» в системном меню. Затем вы можете делать все что угодно (вместо того, чтобы позволить действию по умолчанию закрыть форму).

Например, вы можете снова отобразить диалог входа в систему.

Это не повлияет на другие способы закрытия основной формы / приложения, поэтому вы все равно можете закрыть приложение из (первой вкладки) в диспетчере задач.

[Ранее этот Q был помечен как Delphi. Из-за этого первая версия моего ответа содержит реализацию этой идеи в Delphi.]
1

Другие решения

Других решений пока нет …