!null.com
02
10
2009

Java, SWT get locked state

Привет

Хочу рассказать как решить не совсем типичную для 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)

 

Метод конечно немного извращённый, но работает :)

У кого есть вариант получше - предлагайте.

 







Последние записи