VB.NET暂停Windows关闭或注销



我在检测到关闭或登录时尝试显示一些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 Messages停止了"此程序正在阻止您登录您..."。

但是,我希望在收到消息"用户正在关闭/系统关闭"消息后,用户可以选择命令按钮来删除某些内容,然后关闭或登录可以继续。

启动后取消关闭/注销几乎是不可能的。就像您在问题中所说的那样,您最多可以得到"此程序阻止窗口关闭"

a 电位解决方案将是为InitiateShutdownInitiateSystemShutdownInitiateSystemShutdownEx功能创建系统范围的钩子(需要C 或其他一些低级语言)。但是,他们需要仔细编码并进行彻底的测试,即使您在大多数时间都设法使它们工作,也无法保证操作系统不会通过其他一些,甚至更深的功能绕过它们(其中包含很多

来源:

我研究了此大约两年前的重度,以尝试制作一个程序,该程序将完全阻止用户选择的情况。但是,如上所述,事实证明,它非常困难,即使不是不可能。我的尝试都没有成功。

检测到关机时可以立即调用shutdown /a。(/a代表"流产")。

这是Windows中的内置命令行实用程序,因此您将其称为呼叫VB应用程序中命令行实用程序的通常方式。诀窍是它必须足够快。

您可以尝试的另一种更刺耳的方法是发送CTRL+ALT+DEL,然后是任务管理器(然后隐藏它。也许您可以这么快就可以做到这一点,用户只会看到快速闪烁)。当我手动完成时,通常会中止关闭。

最新更新