Экран обнаружения Java при событии - PullRequest
0 голосов
/ 26 апреля 2018

Есть ли в Java способ обнаружения включения подсветки монитора?

Я использую Windows 8.1.

Я просто хочу запускать функцию всякий раз, когда включается экран, например, когда вы поворачиваете мышь через 20 минут.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 27 апреля 2018

java.awt.window имеет функцию, которая читает следующее:

getGraphicsConfiguration ()

public GraphicsConfiguration getGraphicsConfiguration()

Получает GraphicsConfiguration, связанный с этим Component. Если Component не был назначен конкретный GraphicsConfiguration, GraphicsConfiguration из Component Контейнер верхнего уровня объекта возвращается. Если Component был создан, но еще не добавлен в Container, это метод возвращает ноль.

Возвращает:

GraphicsConfiguration, используемый этим Component или null

Это может быть не совсем то, что вы ищете, но вы можете обойти это и, возможно, использовать его, чтобы определить, является ли монитор нулевым или нет.

полные документы: https://docs.oracle.com/javase/7/docs/api/java/awt/Component.html#getGraphicsConfiguration()

0 голосов
/ 27 апреля 2018

Я почти уверен, что нет чистого пути Java. Но если ситуация с заставкой вашего монитора полностью в ваших руках, вы можете использовать чисто черную заставку.

Это решение не твердое, но оно может попасть в точку> 95% времени.

1) Установите чисто черную заставку в соответствии с настройками энергии (т. Е. Когда экран должен выключиться).

2) С интервалом 0,5 секунды. Проверка резьбы, если позиция мыши на экране была изменена.

3) Если это так, используйте createScreenCapture () Robot для получения BufferedImage всего экрана.

4) Проанализируйте изображение. Самый быстрый способ - получить прямой доступ к его байтам: final DataBufferByte dbi = (DataBufferByte) img.getRaster().getDataBuffer(); Если он чисто черный, подсветка должна быть выключена.

Чтобы сохранить циклы (скриншот + анализ потребляет много энергии.), Вы можете запретить снимки экрана, пока мышь не будет двигаться в течение 20 минут или того времени, которое у вас было. Возможно, есть Java-способ получения этой информации из системы, поэтому вам не нужно менять параметры в двух местах (Windows и ваше приложение).

0 голосов
/ 26 апреля 2018

Не то, что я знаю.

Я использовал библиотеку JNA (для которой требуется .dll / .so по вашему пути), чтобы вызвать нативный apis ОС для опроса, включена ли заставка или нет (win32), или, например, получить идентификатор потока lib pthread self на linux.

Но вам нужно будет немного покопаться, чтобы узнать родной интерфейс API (не так сложно в Google). JNA будет кривой обучения, но как только вы ее получите, это вполне реально!

В JNA также есть обратные вызовы, но я не смог их опробовать. Осторожно, это определенно не чистая Java!

...