Я думаю, вы хотите посмотреть на Runtime.addShutdownHook () . Это дает вам последнюю возможность сделать что-то до того, как JVM закроется. Это позволяет вам определять фактический выход из системы, когда все приложения закрыты, но не просто временно переключают пользователей, оставляя их состояние готовым к возврату. Однако, как предупреждение, все, что вы планируете делать во время процесса выключения, должно быть кратким, так как ОС может в любой момент SIGKILL (или его эквивалент) на вас, что немедленно останавливает JVM.
Если это не то, что вам нужно, вам, вероятно, понадобится использовать JNI для регистрации собственного слушателя. Что касается других событий Windows, библиотека AWT предоставляет ряд классов для реализации прослушивателей, которые могут быть интересны большинству обычных приложений. В этом случае вас может заинтересовать FocusEvent .