Приветствую всех читателей блога scriptcoding.ru. В данной статье мы рассмотрим работу с классом WMI Win32_DesktopMonitor, который дает возможность узнать основные параметры монитора компьютера.
Класс WMI Win32_DesktopMonitor позволяет получить информацию о параметрах монитора компьютера, подключенного к системе. Начиная с операционной системы Windows Vista, свойства данного класса заменяет Win32_DisplayConfiguration. Класс WMI Win32_DesktopMonitor содержит в своем составе порядка 28 свойств, которые в основном позволяют определить технические параметры монитора.
Класс Win32_DesktopMonitor происходит от CIM_DesktopMonitor, который является производным от CIM_Display. CIM_Display происходит от CIM_UserDevice, который является производным от CIM_LogicalDevice.
Информация о параметрах монитора компьютера может быть получена не только через сценарии, но и с помощью утилиты WMI CIM Studio. Откройте данную утилиту, подключитесь к пространству именrootCIMV2, в левой панели выберите класс Win32_DesktopMonitor. Теперь давайте рассмотрим, какую информацию о нем можно получить (правая панель).
На вкладке Properies можно просмотреть список всех доступных свойств, свойство отмеченное ключиком (DeviceID) является ключевым. Так как методы у класса не реализованы и ассоциативных связей нет, то вкладки Associations и Methods не представляют интереса.
Что бы просмотреть информацию об экземплярах класса (информацию о доступных мониторах), нужно нажать на кнопку Instances. Так как я работаю с ноутбука, то и экземпляр только один. Если нажать дважды по имени экземпляра класса WMI, то можно просмотреть его параметры.
Файлы, связанные с классом — Cimwin32.mof и Cimwin32.dll, сам класс предоставляет провайдер Win32.
Теперь давайте запустим командную строку, и поработаем с утилитой WMIC. Для этого, в консольном окне выполните следующие команды.
Получаем MOF описание класса:
WMIC CLASS Win32_DesktopMonitor |
Выводим во внешний документ информацию о параметрах монитора компьютера:
WMIC PATH Win32_DesktopMonitor GET /FORMAT:HFORM>d:\work\info.htm |
Значение ключевого свойства DeviceID
WMIC PATH Win32_DesktopMonitor GET DeviceID |
Текущее расширение монитора компьютера:
WMIC PATH Win32_DesktopMonitor GET ScreenHeight, ScreenWidth |
Получим:
ScreenHeight ScreenWidth
768 1366
Теперь давайте рассмотрим свойства класса.
Свойства класса Win32_DesktopMonitor – параметры монитора
Availability– Содержит информацию относительно доступности и состояния монитора компьютера, (CIM_LogicalDevice). Значения:
- 1 (0x1) – Другое.
- 2 (0x2) — Нет данных.
- 3 (0x3) — Работает/Полная мощность.
- 4 (0x4) – Предупреждение.
- 5 (0x5) – Тестируется.
- 6 (0x6) – Неприменимо.
- 7 (0x7) — Питание выключено.
- 8 (0x8) — Автономная работа.
- 9 (0x9) — Не обслуживает.
- 10 (0xA) – Деградация.
- 11 (0xB) — Не установлено.
- 12 (0xC) — Ошибка установки.
- 13 (0xD) — Энергосбережение — Нет данных.
- 14 (0xE) — Энергосбережение — Режим низкого потребления.
- 15 (0xF) — Энергосбережение — Ждущий режим.
- 16 (0x10) — Цикл электропитания.
- 17 (0x11) — Энергосбережение – Предупреждение.
Bandwidth— Максимально допустимая частота в МГц. Если неизвестна, введите 0, (CIM_DesktopMonitor).
Caption– Информация о параметрах монитора компьютера в короткой форме, (CIM_ManagedSystemElement).
ConfigManagerErrorCode– Ошибка конфигурации.
ConfigManagerUserConfig– Определяет, использует ли устройство пользовательские настройки (TRUE или FALSE), (CIM_LogicalDevice).
CreationClassName– Класс, создавший объект, (CIM_LogicalDevice).
Description– Описание параметров монитора, (CIM_ManagedSystemElement).
DeviceID– Уникальный идентификатор монитора, (CIM_LogicalDevice).
DisplayType– Параметр показывает тип монитора или ЭЛТ, (CIM_DesktopMonitor). Значения:
- 0 — Нет данных.
- 1 – Другое.
- 2 — Мультичастотный цветной.
- 3 — Мультичастотный черно-белый.
- 4 — Цветной с фиксированной частотой.
- 5 — Черно-белый с фиксированной частотой.
ErrorCleared— Является логическим значением, указывающим, что ошибка, возвращенная свойством LastErrorCode, устранена, (CIM_LogicalDevice).
ErrorDescription– Содержит описание ошибки, (CIM_LogicalDevice).
InstallDate– Время и дата установки, (CIM_ManagedSystemElement).
IsLocked— Указывает, является ли монитор заблокированным (пользовательский ввод-вывод запрещен), (CIM_UserDevice).
LastErrorCode– Код последней ошибки, которую вернуло устройство, (CIM_LogicalDevice).
MonitorManufacturer– Информация об изготовителе монитора.
MonitorType– Тип монитора компьютера.
Name– Метка монитора, (CIM_ManagedSystemElement).
PixelsPerXLogicalInch– Горизонтальное разрешение монитора.
PixelsPerYLogicalInch– Вертикальное разрешение монитора.
PNPDeviceID— Win32-идентификатор логического устройства Plug and Play, (CIM_LogicalDevice).
PowerManagementCapabilities— Массив параметров питания, связанных с устройством, (CIM_LogicalDevice). Значения:
- 0 (0x0) – Неизвестно.
- 1 (0x1) — Не поддерживается.
- 2 (0x2) – Отключено.
- 3 (0x3) — Включено.
- 4 (0x4) — Энергосберегающий режим вводится автоматически.
- 5 (0x5) – Устанавливается состояние питания.
- 6 (0x6) – Поддерживается циклическая мощность.
- 7 (0x7) – Поддерживается временное включение питания.
PowerManagementSupported– Содержит логическое значение, которое указывает, поддерживается ли управление питанием, (CIM_LogicalDevice).
ScreenHeight— Логическая высота экрана (в экранных координатах), (CIM_DesktopMonitor).
ScreenWidth— Логическая ширина экрана (в экранных координатах), (CIM_DesktopMonitor).
Status– Статус устройства, (CIM_ManagedSystemElement).
StatusInfo– Числовое значение, определяющее информацию о статусе, (CIM_LogicalDevice). Значение:
- 1 (0x1) – Другое.
- 2 (0x2) – Неизвестно.
- 3 (0x3) – Включено.
- 4 (0x4) – Отключено.
- 5 (0x5) — Не применяется.
SystemCreationClassName— Имя класса создания системы, (CIM_LogicalDevice).
SystemName– Системное имя, (CIM_LogicalDevice).
Приступаем к программированию — основные параметры монитора компьютера
Ну и для закрепления пройденного материала – два сценария Windows Script Host, оба выводят информацию об основных параметрах монитора компьютера во временный внешний файл, который потом зразу открывается в программе WordPad.
Пример программного кода на языке VBScript:
'************************************************************** ' Параметры монитора ' Win32_DesktopMonitor.vbs '************************************************************** Option explicit dim objService, colItems, objItem dim MonitorInfo, objClassProperty dim FSO, TempPath, TxtFile Set objService = GetObject("WinMgmts:\\.\Root\CIMV2") Set colItems = objService.ExecQuery("SELECT * FROM Win32_DesktopMonitor") MonitorInfo = "Основные параметры монитора компьютера" & vbCrLf & vbCrLf ' Начинаем перебор коллекции For Each objItem in colItems ' Начинаем перебор всех свойств для текущего экземпляра класса WMI For Each objClassProperty In objItem.Properties_ ' Если значение больше 0 If Len(objClassProperty.value)>0 Then MonitorInfo = MonitorInfo & objClassProperty.Name &"= " & objClassProperty.value &vbCrLf End If Next MonitorInfo = MonitorInfo & "----------------------------------------------" &vbCrLf &vbCrLf Next ShowInNotepad(MonitorInfo) 'Процедура создания временного файла с данными Sub ShowInNotepad(StrToFile) Set FSO = CreateObject("Scripting.FileSystemObject") TempPath = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%") & "\" & FSO.GetTempName Set TxtFile = FSO.CreateTextFile(TempPath) TxtFile.WriteLine(StrToFile) TxtFile.Close CreateObject("WScript.Shell").Run "wordpad.exe " & TempPath End Sub |
Пример программного кода на языке JScript:
//************************************************************** // Параметры монитора // Win32_DesktopMonitor.js //************************************************************** var objWMIService, colItems, objItem var MonitorInfo, objItemC, objClassPropertyC, objClassProperty, strVal var TempPath, TxtFile // Получаем доступ к инструментарию Windows Management Instrumentation objWMIService = GetObject("WinMgmts:\\\\.\\Root\\CIMV2"); // выполняем WQL запрос и получаем коллекцию colItems = objWMIService.ExecQuery ("Select * from Win32_DesktopMonitor"); // Начинаем перебор коллекции objItem = new Enumerator(colItems); MonitorInfo = "Основные параметры монитора компьютера\n\n"; for (; !objItem.atEnd(); objItem.moveNext()) { objItemC = objItem.item(); // Начинаем перебор всех свойств для текущего экземпляра класса WMI objClassPropertyC = new Enumerator(objItemC.Properties_); for (; !objClassPropertyC.atEnd(); objClassPropertyC.moveNext()) { objClassProperty = objClassPropertyC.item(); // Если значение больше 0 strVal = objClassProperty.value if (strVal != null){ MonitorInfo+= objClassProperty.Name + "= " + objClassProperty.value + "\n"; } } MonitorInfo += "----------------------------------------------\n\n"; } ShowInNotepad(MonitorInfo) //Функция временного файла с данными function ShowInNotepad(StrToFile){ FSO = WScript.CreateObject("Scripting.FileSystemObject"); TempPath = WScript.CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%") + "\\" + FSO.GetTempName(); TxtFile = FSO.CreateTextFile(TempPath); TxtFile.WriteLine(StrToFile); TxtFile.Close(); WScript.CreateObject("WScript.Shell").Run ("wordpad.exe " + TempPath); } |
И так, давайте рассмотрим, как работает программный код. Оба примера содержат практически одинаковые переменные, программный код отвечает за предоставление информации об основных параметрах монитора компьютера. После того, как мы подключились к инструментарию Windows Management Instrumentation, нам нужно получить доступ к объекту Win32_DesktopMonitor, ссылка на объект будет храниться в переменной colItems, далее в цикле FOR и FOR … EACH происходит обработка коллекции. Обратите внимание, что для доступа к коллекции в сценарии JSCRIPTмы применили внутренний объект Enumerator. Функция (процедура) ShowInNotepad отвечает за создание временного файла, запись в него содержимого переменной MonitorInfo и открытие с помощью приложения wordpad.exe.