![](/img/trans.png)
[英]How can I prevent my C# application from opening new windows during context menu?
[英]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.