Я работаю над основанной на терминалах системой, работающей в Windows 2003. Он состоит из приложения для замещения рабочего стола, с которого пользователь запускает программы. Он также имеет кнопку выхода из системы. Когда пользователь выходит из системы, должны произойти две вещи. Во-первых, он выходит из окон. Затем вызывается хранимая процедура очистки состояния базы данных пользователей. Это почти прекрасно работает, но для одной ситуации, и именно тогда пользователь отменяет событие выхода из системы. Типичный сценарий: 1- Пользователь регистрируется, запускает MS Word, редактирует документ, не сохраняет. 2 - Затем пользователь нажимает кнопку выхода из системы. 3- MS Word реагирует на это, прося пользователя сохранить изменения. 4 - Пользователь нажимает отменить.Как снять логотип в Windows Server 2003
На данный момент настольное приложение, возможно, уже вызвало хранимая процедура очистки состояния базы данных. Как я могу поймать это поведение в настольном приложении? Есть ли сообщение о том, что операция конечного сеанса была отменена?
Имеет ли смысл мой вопрос?
О, все приложения написаны на Delphi 7, но я также работаю на C, C++ и C#, поэтому ответы на этих языках также оценены.
Вы можете управлять службой на этой машине? ... также, пытались ли вы запустить свою хранимую процедуру с помощью сценария выхода из группы на основе grouppolicy? – DarkSquirrel42
Я думаю, вы должны вместо этого попытаться обнаружить фактический выход из системы и предположить, что он отменен иначе: Word-cancel происходит, когда сообщение 'WM_QUERYENDSESSION' отправляется в Word; Если выход из системы отменен, система никогда не отправит сообщение «WM_ENDSESSION». – Medinoc
@Medinoc: Документация MSDN гласит: «Когда приложение возвращает TRUE для WM_QUERYENDSESSION, оно получает сообщение WM_ENDSESSION, и оно завершается независимо от того, как другие приложения отвечают на сообщение WM_QUERYENDSESSION». Это означает, что приложение для замены рабочего стола получит WM_ENDSESSION, даже если оно отменено словом. – Pelle