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

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

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

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

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

1 ответ

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

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

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

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

Другие вопросы по тегам