2013-04-10 25 views
1

下面的代碼可以讓我以防止Windows從鎖定本身進入空閒狀態和我的機器:預防和重新啓用Windows空閒狀態

[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
public static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags); 

public static void PreventSleep() 
{ 
    if (SleepUtil.SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS 
      | EXECUTION_STATE.ES_DISPLAY_REQUIRED 
      | EXECUTION_STATE.ES_SYSTEM_REQUIRED 
      | EXECUTION_STATE.ES_AWAYMODE_REQUIRED) == 0) 
      SleepUtil.SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS 
       | EXECUTION_STATE.ES_DISPLAY_REQUIRED 
       | EXECUTION_STATE.ES_SYSTEM_REQUIRED); 
    } 

這工作得很好,但我需要做的重新啓用閒置?我一直在搞一些事情,但每次嘗試時,我都必須離開筆記本電腦10分鐘以查看它是否閒置(我的電源選項已被組策略鎖定)。

回答

2

如何將呼叫的返回值保存到SetThreadExecutionStatedocumentation說:

如果函數成功,返回值就是前一個線程的執行狀態。

所以這似乎是合理的,你可以寫:

private EXECUTION_STATE SavedState; 

SavedState = SleepUtil.SetThreadExecutionState(...); 

SavedState包含以前的值。因此,它好像你可以把東西回來寫:

SleepUtil.SetThreadExecutionState(SavedState); 

你甚至可以檢查返回值(SavedState)來確定默認的是什麼,並用它...

至少,這是我會先嚐試一下。

+0

只是有機會測試這個,但它絕對有效!非常感謝。作爲一個方面說明,我刪除了EXECUTION_STATE.ES_AWAYMODE_REQUIRED標誌,因爲這阻止了我睡覺我的機器。現在它會休眠並繼續,同時繼續防止鎖定超時。優秀 :) – 2013-04-17 11:48:22

相關問題