禁用屏保和電源管理

[推薦]關於禁用屏幕保護和電源管理<--StartFragment --> 編寫諸如監控、多媒體、大規模數據處理之類程序的時候,我們常常需要禁用屏幕保護和電源管理,以確保程序的正常運行。一般來說,可以使用模擬鼠標鍵盤動作的辦法禁用95下的屏幕保護和電源管理,但是同樣的方法應用到2000/NT,卻常常會無效,這和系統的設置有關係。

運用Windows平臺SDK的界面API可以輕鬆的做到禁用屏幕保護和電源管理,唯一的缺陷是這種方法無法應用到Windows95下的Win32應用程序中。以下,我將介紹具體方法。


使用SystemParametersInfo這個API來實現對屏幕保護和電源管理的禁用:

BOOL SystemParametersInfo(

UINT uiAction, // system parameter to retrieve or set

UINT uiParam, // depends on action to be taken

PVOID pvParam, // depends on action to be taken

UINT fWinIni // user profile update option

);


以下是禁用屏幕保護的代碼:

void DisableScrSaver()

{

BOOL bScrActive;

SystemParametersInfo(SPI_GETSCREENSAVEACTIVE, 0, &bScrActive, 0);

if (bScrActive)

{

SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, FALSE, NULL, 0);

}

}

以下是啓用屏幕保護的代碼:

void CNetRGCltDlg::EnableScrSaver()

{

SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, TRUE, NULL, 0);

}


由於禁用電源保護不可以在Win95下被Win32應用程序使用,所以要事先判斷當前操作系統是不是Win95,這裏假設已經用函數BOOL IsWin95()實現。

以下是禁用電源保護的代碼:

void DisablePmmSaver()

{

//

// 由於電源管理的特殊性,不能直接用SPI_SETLOWPOWERACTIVE命令字實現,而是要設置延時。

//


SystemParametersInfo(SPI_GETLOWPOWERTIMEOUT, 0, &m_nLowpowerTimeout, 0);

SystemParametersInfo(SPI_GETPOWEROFFTIMEOUT, 0, &m_nPoweroffTimeout, 0);

SystemParametersInfo(SPI_SETLOWPOWERTIMEOUT, 0, NULL, 0);

SystemParametersInfo(SPI_SETPOWEROFFTIMEOUT, 0, NULL, 0);

}


以下是啓用電源保護的代碼

void EnablePmmSaver()

{

SystemParametersInfo(SPI_SETLOWPOWERTIMEOUT, m_nLowpowerTimeout, NULL, 0);

SystemParametersInfo(SPI_SETPOWEROFFTIMEOUT, m_nPoweroffTimeout, NULL, 0);



m_nLowpowerTimeout = 0;

m_nPoweroffTimeout = 0;

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章