VB.Net Приостановка завершения работы Windows или выхода из системы - PullRequest
0 голосов
/ 15 февраля 2019

Я пытался показать некоторые сообщения MsgBox при обнаружении выключения или выхода из системы ... типа "Вы выходите из системы ...".

    Public Class frmDetectEnd
Private Sub frmDetectEnd_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    AddHandler Microsoft.Win32.SystemEvents.SessionEnding, AddressOf Handler_SessionEnding
End Sub

Public Sub Handler_SessionEnding(ByVal sender As Object, ByVal e As Microsoft.Win32.SessionEndingEventArgs)
    If e.Reason = Microsoft.Win32.SessionEndReasons.Logoff Then
        MessageBox.Show("User is logging off")
    ElseIf e.Reason = Microsoft.Win32.SessionEndReasons.SystemShutdown Then
        MessageBox.Show("System is shutting down")
    End If
End Sub
End Class

Это обнаружение работает, но я хочу остановить процесс выключения / выхода из системыесли отображается MsgBox, потому что в этот момент выполняется процесс завершения работы / выхода из системы и он останавливается с сообщением Windows «Эта программа не позволяет вам выйти из системы ...».

Однако мне бы хотелось, чтобы после получениясообщение «Пользователь входит в систему / Система выключается», пользователь может выбрать командную кнопку для обработки чего-либо, а затем продолжить работу или завершить сеанс.

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Вы можете немедленно позвонить shutdown /a, когда обнаружится отключение.(/ a означает «abort»).

Это встроенная утилита командной строки в Windows, так что вы бы назвали ее обычным способом вызова утилит командной строки в приложении vb.Хитрость в том, что это должно произойти достаточно быстро.

Еще один более хакерский способ, которым вы могли бы попытаться, - отправить CTRL+ALT+DEL, а затем диспетчер задач (а затем спрятать его. Может быть, вы можете сделать все это так быстропользователь увидит только быструю вспышку).Это обычно прерывает выключение, когда я делаю это вручную.

0 голосов
/ 15 февраля 2019

Практически невозможно отменить выключение / выход из системы после его запуска.Самое большее, вы можете получить сообщение «Эта программа не позволяет завершить работу Windows» , как вы сказали в своем вопросе.

A потенциальный решение - создатьобщесистемные хуки для функций InitiateShutdown, InitiateSystemShutdown и InitiateSystemShutdownEx (требуется C ++ или какой-либо другой низкоуровневый язык).Однако их нужно будет тщательно кодировать и тщательно тестировать, и даже если вам удастся заставить их работать большую часть времени, нет гарантии, что ОС не обходит их через некоторые другие, даже более глубокие функции (она содержит многокак недокументированных, так и именованных функций)1027 * около двух лет назад в попытке создать программу, которая полностью блокировала бы выключение системы, если бы пользователь захотел.Однако, как упомянуто выше, это оказалось чрезвычайно трудным, если не невозможным.Ни одна из моих попыток не увенчалась успехом.

...