检查Windows电源管理是否关闭显示器。

7

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


可能是这个问题的重复。底线是这并不是真正可能的。 - Peter
1
你为什么想知道呢?是为了重新打开它吗?有一种方法可以告诉Windows:“当此应用程序正在运行时,它并没有太多的键盘/鼠标操作,但这并不意味着我们处于空闲状态,所以请勿使屏幕变黑”(例如,对于视频播放器)。如果是这样的话,防止屏幕变黑比收到通知更好,对吧? - Kate Gregory
那个问题似乎是关注人们使用电源开关关闭显示器,而不是Windows因为空闲时间而关闭它。 - Kate Gregory
类似于:http://stackoverflow.com/questions/328490/monitoring-a-displays-state-in-python - user195488
你可以查看 IMSVidDevice:msdn.microsoft.com/en-us/library/dd694519(VS.85).aspx - user195488
2个回答

7

我认为在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 Code Pack的链接:Windows API Code Pack:在哪里?

如果您想像本帖子中提到的那样使用它,请参考此链接:https://dev59.com/TGAf5IYBdhLWcg3w_G2r#27709672


谢谢,伙计。我只会添加下载该库的链接 :) - sczdavos
非常好用,结合来自https://dev59.com/71HTa4cB1Zd3GeqPPTLJ#9858981的屏幕保护程序检查(将“(isRunning)”更改为“(isRunning || !PowerManager.IsMonitorOn)”),可以覆盖两种类型的屏幕保护:D - BloodyRain2k

1

你的应用程序将收到一个带有SC_MONITORPOWER参数的WM_SYSCOMMAND消息(请确保首先使用0xfff0和wParam)。当屏幕保护程序启动(SC_SCREENSAVE)时,它会发送类似的消息。如果你的目标是防止屏幕关闭,你可以在这些消息上返回0,但是当用户设置了密码时,这种方法不起作用。


如果您的应用程序窗口不是活动窗口,它也无法工作。 - Dunk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接