摘要:防止進入螢幕保護程式
最近為了轉檔,所以用遠端桌面在Server跑,不過因 為偶爾要看一下狀態,所以當我切換到server時,都 已經進入螢幕保護程式了,我必須要輸入密碼才能解除鎖定 ,真的很麻煩,所以開始找解決方案...
1.關閉螢幕保護程式
這個方法看起來很簡單,只需要把螢幕保護程式關閉就可以 解決問題
2.通知系統目前程式畫面需要一直被顯示
這個做法和powerpoint或是一些影片程式的做法 一樣,當我在播影片的時候當然不希望被螢幕保護程式干擾 ...不過這個經過測試好像沒效..
所以只好採取第一種方式...
記得在關閉螢幕保護程式前,先確定之前有沒有啟動,順便 把狀態記下來,程式跑完的話還要記得復原,否則之後就沒 有螢幕保護程式了!
程式碼:
第二種方法或許也是有效,但是針對有螢幕保護可能就沒辦 法...那個應該是要防止程式進入待命或休眠用的,有機 會再試試看..一併附上程式碼與參考
參考連結:http://www.pinvoke.net/def ault.aspx/kernel32/setthre adexecutionstate.html
1.關閉螢幕保護程式
這個方法看起來很簡單,只需要把螢幕保護程式關閉就可以
2.通知系統目前程式畫面需要一直被顯示
這個做法和powerpoint或是一些影片程式的做法
所以只好採取第一種方式...
記得在關閉螢幕保護程式前,先確定之前有沒有啟動,順便
程式碼:
private enum SPI : uint
{
SPI_GETSCREENSAVEACTIVE = 0x0010,
SPI_SETSCREENSAVEACTIVE = 0x0011
}
private enum SPIF : uint
{
None = 0x00,
SPIF_UPDATEINIFILE = 0x01,
SPIF_SENDCHANGE = 0x02,
SPIF_SENDWININICHANGE = 0x02
}
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SystemParametersInfo(SPI uiAction, uint uiParam, ref uint pvParam, SPIF fWinIni);
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SystemParametersInfo(SPI uiAction, uint uiParam, uint pvParam, SPIF fWinIni);
/// <summary>
/// 關閉螢幕保護程式
/// </summary>
public static void DisableScreensaver()
{
SystemParametersInfo(SPI.SPI_SETSCREENSAVEACTIVE, 0, 0, SPIF.None);
}
/// <summary>
/// 啟動螢幕保護程式
/// </summary>
public static void EnableScreensaver()
{
SystemParametersInfo(SPI.SPI_SETSCREENSAVEACTIVE, 1, 0, SPIF.None);
}
/// <summary>
/// 檢查是否有螢幕保護程式
/// </summary>
/// <returns>true:有,false:沒有</returns>
public static bool CheckScreensaver()
{
bool isActive = false;
SystemParametersInfo(SPI.SPI_GETSCREENSAVEACTIVE, 0, ref isActive, SPIF.None);
return isActive;
} 第二種方法或許也是有效,但是針對有螢幕保護可能就沒辦
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern EXECUTION_STATE SetThreadExecutionState(
EXECUTION_STATE flags);
[Flags]
private enum EXECUTION_STATE : uint
{
ES_SYSTEM_REQUIRED = 0x00000001,
ES_DISPLAY_REQUIRED = 0x00000002,
// ES_USER_PRESENT = 0x00000004,
ES_CONTINUOUS = 0x80000000
}
public static void PreventMonitorPowerdown()
{
SetThreadExecutionState(EXECUTION_STATE.ES_DISPLAY_REQUIRED |EXECUTION_STATE.ES_CONTINUOUS);
}
public static void AllowMonitorPowerdown()
{
SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS);
} 參考連結:http://www.pinvoke.net/def