繁体   English   中英

如何防止Windows显示屏幕保护程序或从应用程序关闭电源?

[英]How can i prevent my windows from showing screensaver or powering down from my application?

我有一个数字标牌应用程序,要在计算机上优先运行。 我现在已经加入了win32事件(ES_DISPLAY_REQUIRED),以防止出现这种情况。 但是我想摆脱这个win32调用,因为我认为那是一个提升我的应用程序权限的程序,因此它需要以管理员身份运行。

有托管的方法可以做到这一点吗? 我的意思是,媒体播放器等在观看电影时如何防止睡眠/屏保?

您可以尝试使用SetThreadExecutionState函数,如下所示:

[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern uint SetThreadExecutionState(uint esFlags);
public const uint ES_CONTINUOUS = 0x80000000;
public const uint ES_SYSTEM_REQUIRED = 0x00000001;
public const uint ES_AWAYMODE_REQUIRED = 0x00000040;

public void AllowStandbyMode(bool allow)
{
    if (allow)
    {
        // Set state back to normal
        SetThreadExecutionState(ES_CONTINUOUS);
    }
    else
    {
        // Try this for vista, it will fail on XP
        if (SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_AWAYMODE_REQUIRED) == 0)
        {
            // Try XP variant as well just to make sure 
            SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED);
        }    
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM