我正在编写一个应用程序在播放电影的C#中。我需要弄清楚如何使用C#禁用屏幕保护程序和电源选项。在C中禁用屏幕保护程序和电源选项#
我知道Windows SDK API有一个叫做SetThreadExecutionState()的函数可以用来做到这一点,但是我不知道是否有更好的方法来做到这一点。如果没有,我该如何将这个函数加入到C#中?
我正在编写一个应用程序在播放电影的C#中。我需要弄清楚如何使用C#禁用屏幕保护程序和电源选项。在C中禁用屏幕保护程序和电源选项#
我知道Windows SDK API有一个叫做SetThreadExecutionState()的函数可以用来做到这一点,但是我不知道是否有更好的方法来做到这一点。如果没有,我该如何将这个函数加入到C#中?
不知道是否有一个更好的.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。
http://stackoverflow.com/questions/241222/need-to-disable-the-screen-saver-screen-locking-in-windows-c-net – user1005462 2015-10-06 12:30:58
SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS | EXECUTION_STATE.ES_DISPLAY_REQUIRED | EXECUTION_STATE.ES_SYSTEM_REQUIRED); - 在win10上完美工作 – user1005462 2015-10-06 12:32:14
如果您只是禁止激活屏幕保护程序/电源选项(例如每隔N秒向OS发送一次击键),该怎么办? – fre0n 2010-02-17 21:55:53
@icemanind:你知道了吗? – 2010-02-28 16:53:16
是的。我在C#中找到了一个相当不错的类:http://www.codeproject.com/KB/cs/ScreenSaverControl.aspx – Icemanind 2010-03-01 22:34:40