我想知道是否有可能了解显示器是打开还是关闭。
这就是我尝试过的:
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");
}
但即使我关闭显示器(或直接断开电源),它仍继续算一个显示器。
我怎么知道显示器是否关闭?
答案 0 :(得分:2)
这在跨平台Java中肯定是不可能的,说实话,即使我们使用本机代码,也不可能在可靠的意义上实现。
为Windows本地执行此操作的(不可靠)方法是使用GetDevicePowerState
- 在kernel32.dll
中找到它。然而,从实验中我使用此功能前后我可以说它肯定不适用于每个显示器,显然即使这是可靠的,它也将是一个仅限Windows的解决方案。
如果您确实想要沿着这条路线考虑上述限制,那么使用MonitorFromPoint
来获取主监视器的句柄(传递0,0作为点并使用{{1标志。)
答案 1 :(得分:1)
某些信息可能在操作系统手中,特别是对于笔记本电脑 - 如果盖子打开或关闭,OS可能会收到一些通知。对于VGA连接器来说,肯定是不可能的,也许HDMI或DVI监视器会向操作系统报告。
您应该搜索某些特定于操作系统的功能,可能是与电源管理相关的功能。
答案 2 :(得分:0)
唯一的方法是在显示器和插座之间连接某种电源使用监控设备。除此之外,我认为即使是电脑也无法判断显示器是打开还是关闭;只是信号引线是否连接。
GraphicsEnvironment只能告诉您用户在操作系统级别配置的桌面排列。它不关心是否有真实的显示器显示它,或者它是否是远程桌面连接,或者是否没有。
答案 3 :(得分:0)
整个想法都有缺陷。
没有办法确定是否连接了监视器让我们说一个VGA端口,因为它单向工作(仅输出)。虽然监视器可以告诉计算机其添加到VGA的功能,但其完全可选。
它与HDMI不同(设备实际上需要相互通信),但这并不一定意味着监视器连接到端口,即使显卡结束相信那个。它很可能是一个录音设备或监视器以外的任何东西。
唯一可以确定显示器是否打开的情况是显示器内置并由计算机本身控制(例如笔记本电脑)。信息仍然是特定于设备的,可能无法通过任何操作系统调用获得。
即使您设法从操作系统获得指示(通过Windows API建议),您也绝不能依赖它正确。这将是操作系统的最佳猜测,并且在某些配置中仍然会出现系统错误。