检查显示是不是被windows电源管理关闭
Posted
技术标签:
【中文标题】检查显示是不是被windows电源管理关闭【英文标题】:Check if display is turned off by windows power management检查显示是否被windows电源管理关闭 【发布时间】:2011-09-25 17:39:05 【问题描述】:如果“Windows 电源管理”已关闭显示,我如何以编程方式检查 Windows 7 和 XP? (如果能收到事件就更好了。)
【问题讨论】:
可能是 this 的副本?最重要的是,这实际上是不可能的。 你为什么想知道?那你可以重新打开它吗?有一种方法可以对 Windows 说“当这个应用程序运行时,它不会获得太多的键盘/鼠标操作,但这并不意味着我们处于空闲状态,所以不要让屏幕变黑”(例如,对于视频播放器)。如果是你,阻止消隐总比被通知好,对吧? 这个问题似乎集中在人类使用电源开关关闭显示器,而不是 Windows 因为空闲时间而这样做 类似:***.com/questions/328490/… 您可以查看 IMSVidDevice:msdn.microsoft.com/en-us/library/dd694519(VS.85).aspx 【参考方案1】:我认为 XP 无法做到这一点。在 Windows 7 中,有各种与电源管理相关的好东西。 Windows API Code Pack 是一组托管包装器,易于从 C# 或 VB 调用并映射 Windows 范例(如事件接收器、Windows 消息和函数指针)转换为 .NET 的(如委托和事件)。从代码包附带的电源管理演示中,您可能会喜欢以下代码:
using Microsoft.WindowsAPICodePack.ApplicationServices;
// . . .
PowerManager.IsMonitorOnChanged += new EventHandler(MonitorOnChanged);
// . . .
void MonitorOnChanged(object sender, EventArgs e)
settings.MonitorOn = PowerManager.IsMonitorOn;
AddEventMessage(string.Format("Monitor status changed (new status: 0)", PowerManager.IsMonitorOn ? "On" : "Off"));
编辑:
Windows API 代码包链接:Windows API Code Pack: Where is it?
如果你想像这篇文章中提到的那样使用它,请检查:https://***.com/a/27709672/846232
【讨论】:
谢谢伙计。我将添加链接以下载该库:) 像魅力一样工作,结合从***.com/a/9858981/1025177 的屏幕保护程序检查(将“(isRunning)”更改为“(isRunning || !PowerManager.IsMonitorOn)”)可以涵盖两种屏幕保护: D【参考方案2】:您的应用程序将在 wParam 中收到一条带有 SC_MONITORPOWER 的 WM_SYSCOMMAND 消息(确保首先使用 0xfff0 和 wParam)。当屏幕保护程序启动时(SC_SCREENSAVE),它将发送类似的消息。如果您的目标是阻止屏幕关闭,您可以在这些上返回 0,尽管当用户设置了密码时这不起作用。
【讨论】:
如果您的应用程序的窗口不是活动窗口,它也不起作用。以上是关于检查显示是不是被windows电源管理关闭的主要内容,如果未能解决你的问题,请参考以下文章