2012-07-19 169 views
7

我有VB.NET應用程序與某些外部服務器通信(通過Intranet維護登錄會話),並且我想要偵聽Sleep/Hibernate事件,以便在它發生了,我想在計算機進入睡眠狀態之前註銷一個現有的會話系統,而我的應用程序將繼續在後臺運行,但不會執行任何操作。在Visual Basic.NET中獲取睡眠/休眠和恢復/喚醒事件

反之亦然,當計算機從休眠狀態恢復或從睡眠狀態喚醒時,我想立即登錄到服務器。

如何獲取這些事件並執行我的代碼?我相信這涉及到我應該在VB中使用的Win32 API。

謝謝。

回答

6

如果您的應用程序使用一個窗口,可以讀取消息循環,你可以簡單地訂閱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')

0

嘗試如下:

重新啓動電腦

System.Diagnostics.Process.Start("Shutdown", " -r -t 00") 

關閉電腦

System.Diagnostics.Process.Start("Shutdown", " -s -t 00")