Windows программно выключить монитор

Выключаем монитор программно в Windows

На хабре есть статья как сделать это из Linux: ссылка Полезная вещь, но не все используют Linux, поэтому я решил написать что-то подобное для Windows. В Windows есть несколько способов добраться до I2C шины монитора, но самый простой из них появился в Windows Vista, его и будем использовать.

Ссылка на соответствующий раздел MSDN: ссылка
Итак, алгоритм управления питанием всеми подключёнными мониторами:

  • Перебираем все логические мониторы в системе, вызывая функцию EnumDisplayMonitors, в ней указываем свою callback функцию которая будет получать описатель для каждого логического монитора – HMONITOR
  • Зная HMONITOR-описатель монитора получаем соответствующий описатель физического монитора — HANDLE, для этого используем GetPhysicalMonitorsFromHMONITOR. Один логический монитор в Windows может включать в себя несколько физических мониторов, поэтому потребуется еще функция GetNumberOfPhysicalMonitorsFromHMONITOR
  • Найденные неповторяющиеся описатели физических мониторов сохраняем в отдельном списке
  • Посылаем команду мониторам, используя функцию SetVCPFeature

К сожалению, есть два неприятных нюанса. Во-первых, всё это будет работать только в Windows Vista или Windows 7. А во-вторых, и это самое неприятное, всё это будет работать не со всеми мониторами, так как некоторые производители мониторов не слишком заботятся о корректной поддержке стандарта DDC-CI. А бывает вообще про него забывают, а только поддерживают чтение EDID, чтобы Windows знала какие разрешения поддерживает монитор. Samsung же вообще использует свой собственный DDC-CI код для управления питанием.
Тем не менее, на большинстве современных мониторов данный подход будет работать.

Код консольной утилиты получился совсем небольшим:

Параметр «-off» выключает все подключённые мониторы, любой другой параметр их включает. Исходный код для VS2008 и готовый EXE можно скачать тут: ссылка
Возможно в будущем дойдут руки сделать полноценную утилиту, которая запускается при старте Windows и включает мониторы, а при завершении работы – выключает, и/или управляет питанием по горячей клавише – тут много можно чего придумать.

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.

Как выключить монитор программно?

Как удаленно выключить монитор?
на работе моноблок hp pro3420 .Пользуюсь удалённо через тимвьювер.как вырубить монитор чтоб не.

Как включить/выключить монитор в НТ?
Народ как погасить монитор в НТ И как её выключить . Заранее спасибо

Как выключить компьютер программно?
можно ли выключить компьютер через PascalABC.NET? Если можно, то какую команду надо прописать.

Как программно выключить смартфон?
Как программно выключить смартфон? Есле можно код.

starkiron, вероятно защита от настроек блокировки учетной записи в групповой политике

В потоке попробуйте организовать бесконечный цикл с перемещением мыши на 1px и и последующим слипом на заданное время.

Второй вопрос — это таймер заставки/отключения монитора/сна/гибернации/выключения

Serg_o_Grey, это не должно мешать пользователю, поэтому дёргать мышь и клаву — последнее дело

Somebody, да, спасибо

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Как выключить экран программно в vb.net?
Как выключить экран программно, не выключая компьютер в vb.net?

Как программно выключить интернет VB.net
Как программно выключить интернет VB.net В смысле просто временно быстро отсоединиться от.

Как программно выключить включенную вкладку TabPage1
Здравствуйте! Подскажите пожалуйста, как программно выключить включенную вкладку TabPage1 ?

Программное выключение монитора

Программное изменение разрешения монитора
Классическое разрешение монитора 96 dpi, но есть и 120 dpi, 144 dpi и даже 192 dpi. Например.

Читайте также:  Линукс минт циннамон или xfce что легче

Программное выключение компьютера
Как можно отключить компьютер после 5 сек., как запустится программа. ( с помощью thread ? ) Или.

Не удается программное выключение компютера в С#.
В С++ Логофф или выключение проходит без проблемм (ExitWindowsEx()). Но такой функции не вижу в.

Программное включение и выключение спец. клавиш Access
Может кто подскажет, как из VBA включать/выключать спец. клавиши Access’а ? Смотрел.

Спасибо, так работает.

Добавлено через 39 минут
Ещё такой вопрос:
Программа должна реагировать на нажатие комбинации клавиш, комбинация клавиш задаётся с помощью HotKey и передаётся в ActionList. Всё дело в том, что программа реагирует на нажатие клавиш только тогда, когда активна. Если нажать на другое окно, программа на нажатие клавиш не реагирует. Как сделать так, чтобы программа реагировала на нажатие клавиш в фоновом режиме?

Всё, разобрался. Только не понял как передать в RegisterHotKey() клавиши из HotKey?

Добавлено через 1 час 17 минут
Что, вообще никто не знает как это сделать?

Ну а в методе который создал пишиш что тебе нужно выполнить при нажатии определенных клавиш

Добавлено через 3 минуты
вот перехват клавиш Ctrl+Alt+Enter

rid****12345, а что дает HWND_BROADCAST? У меня повисает все приложении при использовании такого синтаксиса.

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Как работает программное включение и выключение автофильтра?
Здравствуйте все! Объясните, пожалуйста, как работает программное включение и выключение.

Выключение монитора и рестарт
Всем доброго времени суток. Впервые на данном форуме, сильно не ругайте, не знал куда обратиться.

Самопроизвольное выключение монитора
Привет всем у меня такая проблема!(( монитор самопроизвольно переходит в режим ожидания то есть.

Выключение монитора с последующим нагревом видеокарты
Добрый день. Прошу совета и помощи, ибо сам, похоже, тупой чтобы понять. Текущий пациент — MSI.

Как отключить монитор без его выключения в Windows 10

Читайте, как отключить второй подключенный к ПК монитор, не отключая его от сети . Какими стандартными инструментами или сторонними программами можно воспользоваться. Нередко вы используете дополнительно подключенный внешний монитор к ноутбуку для решения самых разнообразных задач. И когда надо его отключить, то сделать это довольно легко – просто вытащите кабель VGA или HDMI, подключенный к ноутбуку, и все. Но если вы не хотите постоянно выдергивать шнуры когда отключаете монитор, то вам нужно другое простое решение, которое не заставит вас многократно подключать и отключать кабели.

Фактически, это, наверное, самый простой способ, который будет работать каждый раз, и не будет иметь побочных эффектов. Единственное, в этом случае кабели и порты могут быть повреждены, если вы слишком часто подключаете и отключаете их, или делаете это не всегда осторожно. В таком случае мы можем предложить два действенных решения для отключения монитора, не отключая его кабели.

Стандартные инструменты «Windows»

Зеркальное отображение

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

Чтобы зеркально отобразить ваши экраны, нажмите сочетание клавиш «Windows + P» . В появившемся меню «Проецировать» в правой части экрана будет предложено четыре варианта совместного использования двух мониторов. Выберите опцию «Повторяющийся» для одновременного отображения одной и той же картинки на двух мониторах сразу. Применяя повторные нажатия сочетаний клавиш «Windows + P» вы сможете переключаться между предложенными опциями совместной работы мониторов или использовать управление мышкой для выбора нужной опции. Такой способ будет работать для операционных систем «Windows 7» и выше.

Читайте также:  Беспроводная мышь для линукс

Когда вы снова решите расширить изображение на два экрана, «Windows» будет помнить, какой из дисплеев был основным, а какой – вторым.

Отключение выбранного экрана

Если же вы хотите отключить монитор на более длительное время или по какой-либо другой причине, вы можете воспользоваться другими опциями стандартного приложения для работы с мониторами «Windows» . У вас есть возможность временно отключить подачу изображения на любой монитор по вашему выбору, и работать только на одном из них, а второй будет выключен.

Чтобы отключить монитор нажмите сочетание клавиш «Windows + P» . Во всплывающем меню в правой части экрана вы можете выбрать нужную опцию отключения монитора:

«Только экран компьютера» – эта опция отключает второй монитор и оставляет главным экран вашего компьютера;

«Только второй экран» – эта опция соответственно отключает основной экран вашего компьютера и передает сигнал только на второй монитор.

В соответствии с вашими требованиями и временной необходимостью выберите нужную опцию и активируйте ее, используя сочетание клавиш «Windows + P» или при помощи мышки.

Когда у вас возникнет необходимость опять использовать совместно два монитора или вам понадобиться расширенный рабочий стол, вы сможете воспользоваться последней из предложенных опций для подачи изображения на два экрана. Используя сочетание клавиш «Windows + P» вызовите всплывающее меню «Проецировать» и активируйте опцию «Расширить» .

Подача изображения на два монитора будет возобновлена.

Использование сторонних программ

Если использования стандартного инструмента «Windows» для вас не достаточно, то подумайте об использовании программы «Multi Monitor Tool» . Это бесплатная утилита от компании «Nirsoft» , которая позволяет управлять несколькими дисплеями. Она имеет довольно много функций, включая возможность деактивации или полного отключения любого дисплея. Этот инструмент работает только при наличии двух или более дисплеев.

Запустите «Multi Monitor Tool» и из списка отображаемых на нем подключенных дисплеев выберите свой внешний монитор. Щелкните на нем правой кнопкой мыши и выберите «Отключить выбранные мониторы» или «Turn Off Monitors» . Эта опция применима только к выбранному вами монитору. Чтобы обратно включить монитор, щелкните правой кнопкой мыши на нем еще раз и выберите параметры «Включить выбранные мониторы» или «Turn On Monitors» .

Этот метод имеет небольшое неудобство: когда вы включаете или отключаете внешний монитор при помощи инструмента «Multi Monitor Tool» , то служба «Windows» не запоминает, какой из них был вашим основным, а какой вашим вторичным монитором. Монитор, который вы подключаете, всегда будет приниматься как дополнительный монитор.

Чтобы это исправить вам придётся перейти в приложение «Параметры» в «Windows 10» , и в разделе «Система» во вкладке «Дисплей» снова установить первичный и вторичный мониторы. Но выполнять такую процедуру каждый раз не слишком удобно. Вместо этого вы можете сохранить текущую конфигурацию монитора и загрузить ее после подключения второго монитора. Все ваши собственные настройки дисплея сразу вернуться обратно после отключения внешнего монитора.

Перед сохранением текущей конфигурации монитора, настройте свои дисплеи именно так, как вам нравится. Затем откройте «Multi Monitor Tool» , в строке главного меню нажмите раздел «Файл» и выберите вкладку «Сохранить конфигурацию мониторов» . Введите в окне название конфигурационного файла и нажмите кнопку «Сохранить» . Чтобы загрузить сохраненную конфигурацию мониторов, перейдите в раздел «Файл» главного меню и выберите вкладку «Загрузить конфигурацию мониторов» .

Выберите необходимый загрузочный файл и нажмите кнопку «Открыть» . Сохраненная конфигурация мониторов будет загружена.

Выключаем монитор с клавиатуры

Предыдущий топик про ddccontrol, открыл для меня, что по DDC можно мониторы выключать. Не вгонять в сон, не включать энергосберегающий режим, а реально выключать. Так, чтобы гасла (и совсем не мигала!) лампочка питания на морде. Как от нажатия выкл на той же самой морде. Разумеется, можно не только выключать, но и включать. Программно!

Читайте также:  Windows default image icon

1) Это можно сделать программно (ddccontrol)
2) Это можно прописать в скрипт
3) Скрипт можно повесить на хоткей

5) PROFIT??

В список профитов можно записать возможность включения/выключения ОДНОЙ кнопкой на клавиатуре ВСЕХ мониторов (у меня их сейчас два, и я планирую больше в будущем). Кнопка на клавиатуре куда приятнее для нажатия, чем кнопка монитора (по которой её целиться надо, да и монитор от нажатия может слегка поворачиваться, что раздражает).

Задача состоит из трёх этапов:
0) Настроить ddccontrol
1) написать скрипт, который будет адекватно отрабатывать включение/выключение мониторов в любой комбинации включенных выключенных мониторов.
2) Найти неиспользуемую кнопку на клавиатуре (и её код).
3) Назначить на этот код запуск скрипта.

Настройка ddccontrol

Настройка проста: нужно прописать i2c-dev модуль в /etc/modules (модули, которые грузятся автоматом при загрузке) Для первого запуска можете обойтись командой modprobe i2c-dev , которая пробует загрузить модуль здесь-и-сейчас.

Далее нам нужно проверить, что код выключения монитор выключает, а код включения — включает.

Я ранее рассказывал, как работать с ddccontrol, так что не буду всё пересказывать. Для моих самсунгов (обоих) регистр 0xe1 включает/выключает монитор:

ddccontrol -r 0xe1 -w 1 dev:/dev/i2c-2 — вкл; -w 0 — выкл.
Аналогично и для dev:/dev/i2c-1.

Мы так же можем получить это значение: ddccontrol -r 0xe1 dev:/dev/i2c-1

Опуская всё лишнее, нужная строка выглядит так:

Управление 0xe1: +/0/1 [. ] (выкл)
Управление 0xe1: +/1/1 [. ] (вкл)

Нам нужно настроить простенький греп для этого:
ddccontrol -r 0xe1 dev:/dev/i2c-1|grep -o +/./1|cut -b 3
Помимо мусора на stderr (нас он не волнует) мы получаем на выходе число: 1 — вкл, 0 — выкл. Ситуацию «пустая строка» мы обработаем некрасивым, но работающим суммированием с нулём. (пусто + ноль = ноль).

Скрипт

ТЗ для скрипта: если включен хотя бы один монитор — выключить все мониторы. Если включенных мониторов нет, попытаться включить все мониторы. В силу специфики работы ddcontrol нам придётся либо разрешить себе делать sudo ddccontrol без пароля (можете сами дописать скрипт), либо поменять права на доступ для файлов /dev/i2c-* (я просто поменял им группу на свою, этого хватило). На всякий случай напоминаю, что SUID-биты для шелл-скриптов не работают. Поменять группу файлов устройств для ddccontrol можно командой sudo chgrp `id -gn` /dev/i2c-* .

Текст скрипта (я его назвал /usr/local/bin/ddc-powerswitch):

Комментарии к коду: begin/end — настраиваемо. На первое время можете прописать 0 и 6.
Если убрать амперсанд — будет легче отлаживать, но скрипт будет медленнее работать.
Параллелить опрос мониторов не рекомендую, будет race condition.

Поиск кнопки

Я решил использовать не использующуюся мультимедиа-кнопку на клавиатуре. Для этого была использована программа xev (запускать из шелла). Нажимаете нужную кнопку, смотрите код. В моём случае это была кнопка «мой компьютер» (код 198) с иконкой системника с монитором (иконка монитора — что может лучше подойти для вкл/выкл мониторов, тем паче, что она с самого края и попасть по ней случайно сложно?)

Назначение скрипта на хоткей

Я использовал следующий метод (гуру будут пинать за кривизну, просьба к пинку до востребования прилагать более прямые решения, с биндингом на общесистемном уровне):

Отредактируем (создадим) файл

(внимание: кавычки, пробел перед F31)

Теперь пропишем запус всего, что нужно в скрипт автозапуска. Для KDE это

/.kde/Autostart/ddc-hotkeys (не забудте сделать его +x), для gnome

/.config/autostart (для старых версий гнома сложнее, вот).

Вместо 198 нужно указать код клавиши, которая вам приглянулась при общении с xev.

Собственно, всё. Мы зарегистрировали хоткей, прописали его куда нужно. Теперь по нажатию кнопки, если есть хотя бы один включенный монитор, все мониторы выключаются. Если все мониторы выключены — включаются.

Оцените статью