0

我想知道是否有可能了解显示器是打开还是关闭。

这是我尝试过的:

    GraphicsEnvironment g = GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice[] devices = g.getScreenDevices();
    int monitor_count = 0;
    for(GraphicsDevice device : devices){
        if(device.getType() == GraphicsDevice.TYPE_RASTER_SCREEN)
            monitor_count++;
    }
    if(monitor_count==0){
        System.out.println("Monitor is OFF");
    }else{
        System.out.println("Monitor is ON");
    }

但即使我关闭显示器(或直接断开电源),它也会继续算我一台显示器。

我怎么知道显示器是否关闭?

4

4 回答 4

2

这在跨平台 Java 中肯定是不可能的,老实说,即使我们求助于本机代码,在可靠的意义上也不是真的可能。

在 Windows 上本地执行此操作的(不可靠)方法是使用GetDevicePowerState- 在kernel32.dll. 但是,从我不久前使用此功能所做的实验中,我可以说它肯定不适用于每台显示器,显然即使这是可靠的,它也将是一个仅限 Windows 的解决方案。

如果您确实想沿着这条路线走,请牢记上述限制,然后使用MonitorFromPoint抓住主显示器的句柄(传入 0,0 作为点并使用MONITOR_DEFAULTTOPRIMARY标志。)

于 2013-11-08T13:16:37.673 回答
1

一些信息可能在操作系统手中,特别是对于笔记本电脑 - 如果盖子打开或关闭,操作系统可能会收到一些通知。VGA 连接器肯定不可能,也许 HDMI 或 DVI 显示器会向操作系统报告一些东西。

您应该搜索一些特定于操作系统的功能,可能与电源管理相关。

于 2013-11-08T13:09:01.380 回答
0

唯一的方法是在显示器和插座之间连接某种电力使用监控设备。除此之外,我认为即使是计算机也无法判断显示器是打开还是关闭;只有信号线是否连接。

GraphicsEnvironment 只能告诉你用户在操作系统级别配置的桌面排列。它不关心是否有真正的显示器显示它,或者它是否是远程桌面连接,或者是否什么都没有。

于 2013-11-08T13:05:16.953 回答
0

整个想法是有缺陷的。

无法确定显示器是否连接到 VGA 端口,因为它单向工作(仅输出)。虽然有一种方法可以让显示器告诉计算机其添加到 VGA 的功能,但它完全是可选的。

它与HDMI不同(设备实际上需要相互通信),但这并不一定意味着显示器连接到端口,即使显卡端相信这一点。它很可能是一个录音设备或监视器以外的任何东西。

唯一可以可靠地判断显示器是否打开的情况是显示器是内置的并由计算机本身(例如笔记本电脑)控制。这些信息仍然是特定于设备的,可能无法通过任何操作系统调用获得。

即使您设法从操作系统获得指示(如通过 windows API 建议的那样),您也永远不能依赖它是正确的。这将是操作系统的最佳猜测,并且在某些配置中仍然存在系统性错误。

于 2013-11-08T18:48:16.750 回答