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");
}
但即使我关闭显示器(或直接断开电源),它也会继续计算我的一个显示器
我怎么知道显示器是否关了
# 1 楼答案
这在跨平台Java中当然是不可能的,老实说,即使我们求助于本机代码,在可靠的意义上也不可能做到
对于Windows来说,本机执行此操作的(不可靠)方法是使用^{} -在^{中查找它。然而,从我不久前使用该功能的实验来看,我可以说它肯定不能适用于所有显示器,而且很明显,即使这是可靠的,它也将是一个仅适用于Windows的解决方案
如果您确实想沿着这条路线走,并牢记上述限制,那么使用^{} 抓住主监视器的句柄(将0,0作为点传递,并使用
MONITOR_DEFAULTTOPRIMARY
标志。)# 2 楼答案
唯一的方法是在显示器和插座之间连接某种电源使用监控设备。除此之外,我认为即使是电脑也无法分辨显示器是开着还是关着;仅限信号线是否连接
GraphicsEnvironment只能告诉您用户在操作系统级别配置的桌面布局。它不在乎是否有真正的显示器显示它,或者它是远程桌面连接,或者什么都没有
# 3 楼答案
一些信息可能掌握在操作系统手中,尤其是笔记本电脑——如果盖子打开或关闭,操作系统可能会收到一些通知。对于VGA接口来说,最明显的情况是不可能的,可能是HDMI或DVI监视器向操作系统报告了一些情况
您应该搜索一些特定于操作系统的功能,可能是与电源管理相关的功能
# 4 楼答案
整个想法是有缺陷的
无法确定显示器是否连接到VGA端口,因为它是单向工作的(仅输出)。虽然有一种方法可以让显示器告诉计算机它添加到VGA的功能,但是它的完全是可选的
它与HDMI不同(设备实际上需要相互通信),但这并不一定意味着监视器连接到端口,即使图形卡端认为连接到端口。它很可能是一个录音设备,或者是显示器以外的任何东西
只有当显示器内置并由计算机本身控制(如笔记本电脑)时,才能可靠地判断显示器是否打开。不过,这些信息是特定于设备的,可能无法通过任何操作系统调用获得
即使您设法从操作系统(如通过windows API所建议的)获得指示,您也永远不能指望它是正确的。这将是操作系统的最佳猜测,在某些配置中,这仍然是系统性错误