2013-11-08 3 views
0

Я пытаюсь узнать, возможно ли понять, включен монитор или выключен.Как проверить, включен или выключен монитор

Это то, что я пробовал:

GraphicsEnvironment g = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
    GraphicsDevice[] devices = g.getScreenDevices(); 
    int monitor_count = 0; 
    for(GraphicsDevice device : devices){ 
     if(device.getType() == GraphicsDevice.TYPE_RASTER_SCREEN) 
      monitor_count++; 
    } 
    if(monitor_count==0){ 
     System.out.println("Monitor is OFF"); 
    }else{ 
     System.out.println("Monitor is ON"); 
    } 

Но даже если я закрыть монитор (или отключить непосредственно от власти) он по-прежнему считать меня один монитор.

Как я могу узнать, выключен ли монитор?

+1

Я не думаю, что можно узнать, включен ли монитор таким образом. – Jesper

+0

Рассчитывает виртуальные дисплеи, а не физические. Нет простого способа без перехода на собственный код (и вызов операционной системы) для обнаружения физического присутствия или отсутствия монитора с Java. – brettw

+0

Скорее всего, количество виртуальных дисплеев не изменится просто потому, что монитор выключен. Это может измениться, например, когда вы отсоединяете дополнительный монитор или видеопроектор от ноутбука. – user2622016

ответ

2

Это, безусловно, невозможно в кросс-платформенной Java, и, честно говоря, на самом деле невозможно в надежном смысле, даже если мы прибегаем к собственному коду.

(не надежный) способ сделать это изначально для Windows будет использовать GetDevicePowerState - найти его в kernel32.dll. Однако из экспериментов, которые я использовал с помощью этой функции, я могу сказать, что она определенно не работает с каждым монитором, и, очевидно, даже если бы это было надежно, это было бы решением только для Windows.

Если вы хотите идти по этому пути с учетом вышеуказанных ограничений, а затем использовать MonitorFromPoint, чтобы захватить ручку на основной монитор (перейти в 0,0 в качестве отправной точки и использовать MONITOR_DEFAULTTOPRIMARY флаг.)

+0

Мне нужно это решение только для платформ Windows. Я попробую его на C++. Благодаря! – JackTurky

+0

у вас есть пример кода для этой цели с помощью C++ ??? пожалуйста – JackTurky

0

Единственный способ сделать это - иметь какое-то устройство контроля использования энергии, подключенное между монитором и розеткой. Кроме того, я думаю, что даже компьютер не может определить, включен или выключен монитор; только подключен ли провод сигнала.

GraphicsEnvironment может сообщать только о расположении рабочего стола, которое пользователь настроил на уровне ОС. Неважно, есть ли на нем реальный монитор, или если это соединение с удаленным рабочим столом или нет.

1

Некоторая информация может быть в руках операционной системы, особенно для ноутбуков. ОС может получить уведомление, если крышка открыта или закрыта. Скорее всего, невозможно использовать разъем VGA, возможно, мониторы HDMI или DVI сообщают о чем-то в ОС.

Вы должны найти некоторые конкретные функции ОС, возможно, что-то связанное с управлением питанием.

0

Вся идея ошибочна.

Невозможно точно сказать, подключен ли монитор к порту VGA, поскольку он работает в одностороннем режиме (только выход). Хотя есть способ, как монитор может сообщить компьютеру о его возможностях, добавленных в VGA, но его полностью необязательно.

Его разные с HDMI (устройства на самом деле нужно говорить друг с другом), но это не обязательно означает, что монитор подключен к порту, даже если конец видеокарты считает что. Это может быть устройство записи или что-либо другое, кроме монитора.

Единственные случаи, когда можно было надежно определить, был ли дисплей включен, когда дисплей встроен и управляется самим компьютером (например, ноутбуком). Тем не менее информация является специфичной для устройства и может быть недоступна через любые OS-вызовы.

Даже если вам удастся получить индикацию из ОС (как предлагается через API окон), вы никогда не сможете полагаться на нее, чтобы она была правильно.Это будет наилучшая догадка ОС, и в некоторых конфигурациях систематически будет ошибочно.

Смежные вопросы