需要在Windows C#/.Net中禁用屏幕保护程序/屏幕锁定

需要在Windows C#/.Net中禁用屏幕保护程序/屏幕锁定,c#,screensaver,C#,Screensaver,对于特定的应用程序,我需要在运行时禁用屏幕保护程序。操作员可以手动将其关闭,然后稍后再打开,但最简单的方法是在应用程序运行时停止屏幕保护程序 我该怎么做?我已经找到了使用SPI_SETSCREENSAVEACTIVE关闭屏幕保护程序的代码,但我认为这不是我想要的。系统参数使用SPI_SETSCREENSAVEACTIVE关闭屏幕保护程序是正常的方法。但是,它不会禁用屏幕锁定。有你的答案:使用 这是视频播放器和PowerPoint使用的。试着让你的表单成为最有价值的true它对我有效屏幕保护程序即

对于特定的应用程序,我需要在运行时禁用屏幕保护程序。操作员可以手动将其关闭,然后稍后再打开,但最简单的方法是在应用程序运行时停止屏幕保护程序


我该怎么做?我已经找到了使用SPI_SETSCREENSAVEACTIVE关闭屏幕保护程序的代码,但我认为这不是我想要的。

系统参数使用SPI_SETSCREENSAVEACTIVE关闭屏幕保护程序是正常的方法。但是,它不会禁用屏幕锁定。

有你的答案:使用


这是视频播放器和PowerPoint使用的。

试着让你的表单成为最有价值的true它对我有效屏幕保护程序即使在空闲时间之后也从未出现过…

编辑-我有一个使用现代电源可用性请求API(取代
设置线程执行状态
)的更新答案,请点击此处:

[FlagsAttribute]
公共枚举执行状态:uint
{
ES_系统_必需=0x00000001,
ES_显示_必需=0x00000002,
//不应使用遗留标志。
//ES_USER_PRESENT=0x00000004,
ES_AWAYMODE_REQUIRED=0x00000040,
ES_连续=0x8000000,
}
公共静态类SleepUtil
{
[DllImport(“kernel32.dll”,CharSet=CharSet.Auto,SetLastError=true)]
公共静态外部执行状态SetThreadExecutionState(执行状态esFlags);
}
公众睡眠
{
if(SleepUtil.SetThreadExecutionState)(执行状态为连续
|执行状态。需要显示
|需要执行状态和系统
|执行\u STATE.ES\u AWAYMODE\u REQUIRED)==0)//Windows的离开模式>=Vista
SleepUtil.SetThreadExecutionState(执行状态为连续
|执行状态。需要显示
|执行_STATE.ES_SYSTEM_REQUIRED);//Windows
信用证:

这对XP没有帮助。
事实上,此功能在不同的Windows版本之间不可交叉操作(尽管它在Windows Vista或更高版本中运行得很好)。。。在Windows XP/2003中,此函数应在用户存在时调用(应同时调用)。。。这将定期重置系统和显示空闲计时器。。。在其他Windows版本中,建议您使用ES|U SYSTEM|U REQUIRED | ES|U DISPLAY|U REQUIRED | ES|U CONTINUOUS | ES|U AWAYMODE|REQUIRED…

使用w7 x64测试了这一点,效果非常好!未触发屏幕保护程序或监视器节能功能+1.是的,我也在用:)效果很好!我能找到的最简单的工作解决方案。谢谢在Win10.SetThreadExecutionState(执行(U STATE.ES)连续|执行(U STATE.ES)显示|需要|执行(U STATE.ES)系统|需要)上没有此标志,它对我有效在win10上完美地禁用屏幕保护程序
[FlagsAttribute]
public enum EXECUTION_STATE : uint
{
    ES_SYSTEM_REQUIRED = 0x00000001,
    ES_DISPLAY_REQUIRED = 0x00000002,
    // Legacy flag, should not be used.
    // ES_USER_PRESENT   = 0x00000004,
    ES_AWAYMODE_REQUIRED = 0x00000040,
    ES_CONTINUOUS = 0x80000000,
}

public static class SleepUtil
{
    [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    public static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags);
}

public void PreventSleep()
{
    if (SleepUtil.SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS
        | EXECUTION_STATE.ES_DISPLAY_REQUIRED  
        | EXECUTION_STATE.ES_SYSTEM_REQUIRED 
        | EXECUTION_STATE.ES_AWAYMODE_REQUIRED) == 0) //Away mode for Windows >= Vista
        SleepUtil.SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS
            | EXECUTION_STATE.ES_DISPLAY_REQUIRED 
            | EXECUTION_STATE.ES_SYSTEM_REQUIRED); //Windows < Vista, forget away mode
}
SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS
            | EXECUTION_STATE.ES_DISPLAY_REQUIRED 
            | EXECUTION_STATE.ES_SYSTEM_REQUIRED);