事件上的Java检测屏幕

时间:2018-04-26 20:49:41

标签: java windows-8.1

在Java中是否有办法检测显示器背光何时开启?

我使用的是Windows 8.1。

我只想在屏幕打开时运行一个功能,就像20分钟后摆动鼠标一样。

谢谢!

3 个答案:

答案 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尚未指定具体内容   GraphicsConfigurationGraphicsConfiguration   返回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和您的应用程序)更改参数。