我有VB.NET應用程序與某些外部服務器通信(通過Intranet維護登錄會話),並且我想要偵聽Sleep/Hibernate事件,以便在它發生了,我想在計算機進入睡眠狀態之前註銷一個現有的會話系統,而我的應用程序將繼續在後臺運行,但不會執行任何操作。在Visual Basic.NET中獲取睡眠/休眠和恢復/喚醒事件
反之亦然,當計算機從休眠狀態恢復或從睡眠狀態喚醒時,我想立即登錄到服務器。
如何獲取這些事件並執行我的代碼?我相信這涉及到我應該在VB中使用的Win32 API。
謝謝。
我有VB.NET應用程序與某些外部服務器通信(通過Intranet維護登錄會話),並且我想要偵聽Sleep/Hibernate事件,以便在它發生了,我想在計算機進入睡眠狀態之前註銷一個現有的會話系統,而我的應用程序將繼續在後臺運行,但不會執行任何操作。在Visual Basic.NET中獲取睡眠/休眠和恢復/喚醒事件
反之亦然,當計算機從休眠狀態恢復或從睡眠狀態喚醒時,我想立即登錄到服務器。
如何獲取這些事件並執行我的代碼?我相信這涉及到我應該在VB中使用的Win32 API。
謝謝。
如果您的應用程序使用一個窗口,可以讀取消息循環,你可以簡單地訂閱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
否則,如果您使用的例如一個服務,你必須創建一個隱藏的表單像描述here (scroll down to 'Example 2')
嘗試如下:
重新啓動電腦
System.Diagnostics.Process.Start("Shutdown", " -r -t 00")
關閉電腦
System.Diagnostics.Process.Start("Shutdown", " -s -t 00")