在Java中是否有办法检测显示器背光何时开启?
我使用的是Windows 8.1。
我只想在屏幕打开时运行一个功能,就像20分钟后摆动鼠标一样。
谢谢!
答案 0 :(得分:1)
不是我知道的。
我使用JNA库(在你的路径中需要一个.dll / .so)来调用本机操作系统apis来轮询屏幕保护程序是否打开(win32)或者在linux上提取lib pthread自我线程ID,例如。
但是你需要挖掘一下才能学习与原生api相关的东西(不是很难谷歌)。 JNA将成为学习曲线,但一旦你掌握了它,它就能完全实现!
JNA也有回调,但我没有尝试过。当心,这绝对不是纯粹的java!
答案 1 :(得分:0)
java.awt.window
有一个函数可读取以下内容:
getGraphicsConfiguration()
public GraphicsConfiguration getGraphicsConfiguration()
获取与此
GraphicsConfiguration
相关联的Component
。如果Component
尚未指定具体内容GraphicsConfiguration
,GraphicsConfiguration
返回Component
对象的顶级容器。如果Component
已创建,但尚未添加到Container
,这个 method返回null。<强>返回:强>
此
GraphicsConfiguration
使用的Component
或null
这可能不是您正在寻找的,但您可以解决此问题,并可能使用它来检测监视器是否为空。
完整文档: https://docs.oracle.com/javase/7/docs/api/java/awt/Component.html#getGraphicsConfiguration()
答案 2 :(得分:0)
我很确定没有纯Java方式。但是,如果您的显示器屏幕保护程序完全在您手中,您可以使用纯黑屏幕保护程序。
这种解决方案不是坚如磐石的,但可能会在95%的时间内达到现场。
1)根据您的能量设置设置纯黑屏保(即屏幕关闭时)。
2)如果鼠标的position on screen已更改,请进行0.5秒间隔线程检查。
3)如果是这样,使用Robot的createScreenCapture()来获取整个屏幕的BufferedImage。
4)分析图像。最快的方法是直接访问其字节:final DataBufferByte dbi = (DataBufferByte) img.getRaster().getDataBuffer();
如果它是纯黑色,背光仍应关闭。
为了节省周期(屏幕截图+分析会消耗很多能量。),你可以阻止屏幕捕获,直到鼠标没有移动20分钟或任何你的能量时间。也许有一种Java方法可以从系统中获取这些信息,因此您不必在两个地方(Windows和您的应用程序)更改参数。