有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何检查监视器是否打开或关闭

我想知道是否有可能理解显示器是开着还是关着

这就是我尝试过的:

    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) 个答案

  1. # 1 楼答案

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

    对于Windows来说,本机执行此操作的(不可靠)方法是使用^{}-在^{中查找它。然而,从我不久前使用该功能的实验来看,我可以说它肯定不能适用于所有显示器,而且很明显,即使这是可靠的,它也将是一个仅适用于Windows的解决方案

    如果您确实想沿着这条路线走,并牢记上述限制,那么使用^{}抓住主监视器的句柄(将0,0作为点传递,并使用MONITOR_DEFAULTTOPRIMARY标志。)

  2. # 2 楼答案

    唯一的方法是在显示器和插座之间连接某种电源使用监控设备。除此之外,我认为即使是电脑也无法分辨显示器是开着还是关着;仅限信号线是否连接

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

  3. # 3 楼答案

    一些信息可能掌握在操作系统手中,尤其是笔记本电脑——如果盖子打开或关闭,操作系统可能会收到一些通知。对于VGA接口来说,最明显的情况是不可能的,可能是HDMI或DVI监视器向操作系统报告了一些情况

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

  4. # 4 楼答案

    整个想法是有缺陷的

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

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

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

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