2010-02-17 85 views
5

我正在編寫一個應用程序在播放電影的C#中。我需要弄清楚如何使用C#禁用屏幕保護程序和電源選項。在C中禁用屏幕保護程序和電源選項#

我知道Windows SDK API有一個叫做SetThreadExecutionState()的函數可以用來做到這一點,但是我不知道是否有更好的方法來做到這一點。如果沒有,我該如何將這個函數加入到C#中?

+0

如果您只是禁止激活屏幕保護程序/電源選項(例如每隔N秒向OS發送一次擊鍵),該怎麼辦? – fre0n 2010-02-17 21:55:53

+0

@icemanind:你知道了嗎? – 2010-02-28 16:53:16

+0

是的。我在C#中找到了一個相當不錯的類:http://www.codeproject.com/KB/cs/ScreenSaverControl.aspx – Icemanind 2010-03-01 22:34:40

回答

7

不知道是否有一個更好的.NET解決方案,但這裏是你如何可以使用API​​:

所需usings:

using System.Runtime.InteropServices; 

的的P/Invoke:

public const uint ES_CONTINUOUS = 0x80000000; 
public const uint ES_SYSTEM_REQUIRED = 0x00000001; 
public const uint ES_DISPLAY_REQUIRED = 0x00000002; 

[DllImport("kernel32.dll", SetLastError = true)] 
public static extern uint SetThreadExecutionState([In] uint esFlags); 

然後通過禁用屏保:

SetThreadExecutionState(ES_CONTINUOUS | ES_DISPLAY_REQUIRED); 

由正在重置執行狀態恢復到初始值Finnaly啓用屏保:

SetThreadExecutionState(ES_CONTINUOUS); 

請注意,我只是在我的例子採摘的標誌之一是隨機的。你需要結合正確的標誌來獲得你想要的特定行爲。你會發現description of flags on MSDN

+0

http://stackoverflow.com/questions/241222/need-to-disable-the-screen-saver-screen-locking-in-windows-c-net – user1005462 2015-10-06 12:30:58

+2

SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS | EXECUTION_STATE.ES_DISPLAY_REQUIRED | EXECUTION_STATE.ES_SYSTEM_REQUIRED); - 在win10上完美工作 – user1005462 2015-10-06 12:32:14

相關問題