在Visual Basic.NET中获取Sleep/Hibernate和Resume/Wakeup事件

Kus*_*hal 7 vb.net winapi system-calls

我有VB.NET应用程序与一些外部服务器通信(通过Intranet维护登录会话),我想听取Sleep/Hibernate事件,这样当它发生时,我想在计算机进入睡眠状态之前注销现有的会话系统,虽然我的应用程序将继续在后台运行,但不会做任何事情.

反之亦然,当计算机从Hibernate恢复或从睡眠状态唤醒时,我想立即登录服务器.

如何获取这些事件并执行我的代码?我相信这与我应该在VB中使用的Win32 API有关.

谢谢.

nik*_*nik 8

如果您的应用程序正在使用窗口并且可以读取消息循环,您只需订阅Microsoft.Win32.SystemEvents.PowerModeChanged,如:

AddHandler Microsoft.Win32.SystemEvents.PowerModeChanged, AddressOf SystemEvents_PowerModeChanged

Private Sub SystemEvents_PowerModeChanged(ByVal sender As Object, ByVal e As PowerModeChangedEventArgs)

    Select Case e.Mode
        Case PowerModes.Resume
        Case PowerModes.StatusChange
        Case PowerModes.Suspend
    End Select

End Sub
Run Code Online (Sandbox Code Playgroud)

否则,如果您正在使用服务,则必须创建一个隐藏的表单,如此处所述(向下滚动到'示例2')