2010-02-17 84 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