Привет
Хочу рассказать как решить не совсем типичную для Java задачу - узнать залочен ли компьютер в данный момент.
Сразу оговорюсь:
1. пример для SWT
2. пример, скорее всего только под Windows, может даже только под XP, надо проверить :)
Итак, вот класс, который мы вешаем на таймер:
public class LockCheckerTimer implements Runnable
{
private Display display = null;
private boolean isSleep = false;
public LockCheckerTimer (Display display)
{
this.display = display;
}
@Override
public void run()
{
Point point = display.getCursorLocation();
int width = display.getClientArea().width;
int height = display.getClientArea().height;
Monitor mon = display.getPrimaryMonitor();
// Определяем если комп залочен
if (point.x == 0 && point.y == 0 && width == mon.getBounds().width && height == mon.getBounds().height)
{
// залоченное состояни. Тут встявляем ваш код, который должен выполниться в залоченном состоянии
this.isSleep = true;
}
else
{
if (isSleep)
{
// Компьютер разлочен!
this.isSleep = false;
}
}
display.timerExec(100, this);
}
}
Сам объект создаём следующим образом:
LockCheckerTimer bt = new LockCheckerTimer(main.display);
display.timerExec(100, bt);
где, main.display - дисплей вашего окна
Основная строчка: point.x == 0 && point.y == 0 && width == mon.getBounds().width && height == mon.getBounds().height
Как раз она и определяем залочен ли ваш компьютер
Смысл её заключается в следующем:
1. Когда компьютер залочен, координаты мышки не передаются программе и всегда равны нулю (point.x==0 && point.y==0)
2. Клиентская область дисплея равна всему размеру экрана (width == mon.getBounds().width && height == mon.getBounds().height)
Метод конечно немного извращённый, но работает :)
У кого есть вариант получше - предлагайте.