在C#中禁用屏幕保护程序和电源选项

Ice*_*ind 7 c# winapi screensaver

我正在用C#编写一个播放电影的应用程序.我需要弄清楚如何使用C#禁用屏幕保护程序和电源选项.

我知道Windows SDK API有一个名为SetThreadExecutionState()的函数可用于执行此操作,但是,我不知道是否有更好的方法来执行此操作.如果没有,我如何将此功能合并到C#中?

Cor*_*ton 9

不确定是否有更好的.NET解决方案,但以下是如何使用该API:

所需用途:

using System.Runtime.InteropServices;
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

然后禁用屏幕保护程序:

SetThreadExecutionState(ES_CONTINUOUS | ES_DISPLAY_REQUIRED);
Run Code Online (Sandbox Code Playgroud)

Finnaly通过将执行状态重置为原始值来启用屏幕保护程序:

SetThreadExecutionState(ES_CONTINUOUS);
Run Code Online (Sandbox Code Playgroud)

请注意,我在我的示例中随机选择了其中一个标志.您需要组合正确的标志以获得您想要的特定行为.您将在MSDN上找到标志描述.

  • SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS | EXECUTION_STATE.ES_DISPLAY_REQUIRED | EXECUTION_STATE.ES_SYSTEM_REQUIRED); - 在win10上完美工作 (3认同)