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

Java 如何检查监视器是否打开或关闭,java,awt,monitor,Java,Awt,Monitor,我想知道是否有可能理解显示器是开着还是关着 这就是我尝试过的: GraphicsEnvironment g = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice[] devices = g.getScreenDevices(); int monitor_count = 0; for(GraphicsDevice device : devices){ if(device

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

这就是我尝试过的:

    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");
    }
但即使我关闭显示器(或直接断开电源),它也会继续计算我的一个显示器


如何知道显示器是否关闭?

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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

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


如果您确实想沿着这条路线走下去,请牢记上述限制,然后使用抓住主监视器的手柄(将0,0作为点传递,并使用
监视器\u DEFAULTTOPRIMARY
标志)。

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

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


如果您确实想沿着这条路线走下去,请牢记上述限制,然后使用抓住主监视器的手柄(将0,0作为点传递,并使用
监视器\u DEFAULTTOPRIMARY
标志)。

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

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


如果您确实想沿着这条路线走下去,请牢记上述限制,然后使用抓住主监视器的手柄(将0,0作为点传递,并使用
监视器\u DEFAULTTOPRIMARY
标志)。

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

对于Windows,本机执行此操作的(不可靠)方法是使用-find