【问题标题】:Check if display is turned off by windows power management检查显示是否被windows电源管理关闭
【发布时间】:2011-09-25 17:39:05
【问题描述】:

如果“Windows 电源管理”已关闭显示,我如何以编程方式检查 Windows 7 和 XP? (如果能收到事件就更好了。)

【问题讨论】:

  • 可能是 this 的副本?最重要的是,这实际上是不可能的。
  • 你为什么想知道?那你可以重新打开它吗?有一种方法可以对 Windows 说“当这个应用程序运行时,它不会获得太多的键盘/鼠标操作,但这并不意味着我们处于空闲状态,所以不要让屏幕变黑”(例如,对于视频播放器)。如果是你,阻止消隐总比被通知好,对吧?
  • 这个问题似乎集中在人类使用电源开关关闭显示器,而不是 Windows 因为空闲时间而这样做
  • 您可以查看 IMSVidDevice:msdn.microsoft.com/en-us/library/dd694519(VS.85).aspx

标签: c# c++ winapi windows-7 windows-xp


【解决方案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://stackoverflow.com/a/27709672/846232

【讨论】:

  • 谢谢伙计。我将添加链接以下载该库:)
  • 像魅力一样工作,结合从stackoverflow.com/a/9858981/1025177 的屏幕保护程序检查(将“(isRunning)”更改为“(isRunning || !PowerManager.IsMonitorOn)”)可以涵盖两种屏幕保护: D
【解决方案2】:

您的应用程序将在 wParam 中收到一条带有 SC_MONITORPOWER 的 WM_SYSCOMMAND 消息(确保首先使用 0xfff0 和 wParam)。当屏幕保护程序启动时(SC_SCREENSAVE),它将发送类似的消息。如果您的目标是阻止屏幕关闭,您可以在这些上返回 0,尽管当用户设置了密码时这不起作用。

【讨论】:

  • 如果您的应用程序的窗口不是活动窗口,它也不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-15
  • 1970-01-01
相关资源
最近更新 更多