Класс Win32_Keyboard — информация о клавиатуре

Класс Win32_Keyboard — информация о клавиатуре Объектная модель Windows Management Instrumentation

Класс Win32_Keyboard происходит от класса CIM_Keyboard и позволяет получить информацию о клавиатуре, установленной в системе. Оба класса содержат 23 свойства и два метода — Reset и SetPowerState; оба метода не являются реализованными, то есть, их нельзя использовать.

Прежде чем приступать к описанию свойств Win32_Keyboard, давайте рассмотрим его с помощью утилиты CIM Studio.

Просмотр свойств Win32_Keyboard в WMI CIM Studio

Видим, что ключевым свойством является DeviceID, то есть, для получения конкретного экземпляра класса Win32_Keyboard с помощью метода GET, нам нужно будет указывать значение именно этого свойство, что не очень удобно (почему, объясню далее). Ассоциативных связей у класса нет. Сам класс предоставляется провайдером Win32, динамическая библиотека Cimwin32.dll, MOF файл Cimwin32.mof, пространство имен CIMV2.

На данный момент я работаю на ноутбуке, его родная клавиатура функционирует лишь частично – не работают некоторые кнопки, это уже второй раз такая неудача; первый раз я угробил клавиатуру пролив на нее пиво, второй – слишком часто чистил и в итоге попортил шлейф (я ее снимал). Поэтому, к ноутбуку подключена USB клавиатура, честно говоря, так даже удобнее работать.

Исходя из выше сказанного следует, что на данный момент у класса Win32_Keyboard должны быть два экземпляра, в которых хранится информация о клавиатуре – внешней и встроенной. В утилите CIM Studio это прекрасно видно (выбираем метод Win32_Keyboard и нажимаем на кнопку Instances).

DeviceID - ключевое свойство класса Win32_Keyboard

В первой колонке показаны значения свойства DeviceID, данные значения можно получить и с помощью утилиты WMIC, просто введите в командной строке:

wmic PATH Win32_Keyboard GET DeviceID

В итоге я получил те же значения, что и в утилите WMI CIM Studio:

DeviceID
ACPIPNP03034&C9A0E36&0
USBVID_1C4F&PID_0016&MI_006&1BC65A9C&0&0000

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

А теперь давайте изучим некоторые свойства класса Win32_Keyboard, все они доступны только для чтения.

Свойства Win32_Keyboard

Availability – Наличие и состояние устройства. Унаследовано от класса  CIM_LogicalDevice. Возвращаемые значения не представляю практического интереса.

Caption – Содержит краткое описание (одна строка) объекта. Унаследовано от класса CIM_ManagedSystemElement.

ConfigManagerUserConfig – Только для чтения. Если возвращает значение TRUE (ИСТИНА), то устройство использует конфигурацию, определенную пользователем. Унаследовано от класса CIM_LogicalDevice.

CreationClassName – Содержит имя класса, использовавшегося при создании экземпляра. Унаследовано от класса CIM_LogicalDevice.

Description — Описание объекта. Унаследовано от класса CIM_ManagedSystemElement.

DeviceID – Ключевое свойство для идентификации устройства. Унаследовано от класса CIM_LogicalDevice.

IsLocked – Если значение TRUE, то устройство заблокировано, для предотвращения входа или выхода пользователя. Унаследовано от класса CIM_UserDevice.

Layout – Содержит числовое значение, определяющее раскладку клавиатуры. Унаследовано от класса CIM_Keyboard.

Name – Метка, определяющая объект. Унаследовано от класса CIM_ManagedSystemElement.

NumberOfFunctionKeys — Только для чтения. Количество функциональных клавиш на клавиатуре. Унаследовано от класса CIM_Keyboard.

Status – Показывает статус объекта. Унаследовано от класса CIM_ManagedSystemElement. Возможные значения:

  • «OK»
  • «Error»
  • «Degraded»
  • «Unknown»
  • «Pred Fail»
  • «Starting»
  • «Stopping»
  • «Service»
  • «Stressed»
  • «NonRecover»
  • «No Contact»
  • «Lost Comm»

SystemName — Имя компьютера, на котором установлена клавиатура. Унаследовано от класса CIM_LogicalDevice.

Хорошо, с теорией закончили, можно приступить к практике. Ниже я привожу два сценария Win32_Keyboard.vbs и Win32_Keyboard.js на языках vbscript и jscript соответственно, которые просто выводят информацию об установленных в системе клавиатурах, в моем случае их две.

'**************************************************************
' Информация о клавиатуре
' Win32_Keyboard.vbs 
'**************************************************************
 
Option Explicit
 
Dim objClass, colItems, KeyInfo, objItem
 
' Получаем доступ к классу и пространству имен
Set objClass = GetObject("WinMgmts:\\.\Root\CIMV2:Win32_Keyboard")
' Формируем коллекцию экземпляров 
Set colItems = objClass.Instances_ 
 
KeyInfo = "Информация о клавиатуре:" & vbCrLf & vbCrLf 
 
' Начинаем перебор коллекции
For Each objItem in colItems 
    KeyInfo = KeyInfo &  "Availability: " & objItem.Availability  & VbCrLf 
    KeyInfo = KeyInfo &  "Caption: " & objItem.Caption  & VbCrLf 
    KeyInfo = KeyInfo &  "ConfigManagerErrorCode: " & objItem.ConfigManagerErrorCode  & VbCrLf 
    KeyInfo = KeyInfo &  "ConfigManagerUserConfig: " & objItem.ConfigManagerUserConfig  & VbCrLf 
    KeyInfo = KeyInfo &  "CreationClassName:"& objItem.CreationClassName  & VbCrLf 
    KeyInfo = KeyInfo &  "Description: " & objItem.Description  & VbCrLf 
    KeyInfo = KeyInfo &  "DeviceID: " & objItem.DeviceID  & VbCrLf 
    KeyInfo = KeyInfo &  "ErrorCleared: " & objItem.ErrorCleared  & VbCrLf 
    KeyInfo = KeyInfo &  "ErrorDescription: " & objItem.ErrorDescription  & VbCrLf 
    KeyInfo = KeyInfo &  "InstallDate: " & objItem.InstallDate  & VbCrLf 
    KeyInfo = KeyInfo &  "IsLocked: " & objItem.IsLocked  & VbCrLf 
    KeyInfo = KeyInfo &  "LastErrorCode: " & objItem.LastErrorCode  & VbCrLf 
    KeyInfo = KeyInfo &  "Layout: " & objItem.Layout  & VbCrLf 
    KeyInfo = KeyInfo &  "Name: " & objItem.Name  & VbCrLf 
    KeyInfo = KeyInfo &  "NumberOfFunctionKeys: " & objItem.NumberOfFunctionKeys  & VbCrLf 
    KeyInfo = KeyInfo &  "Password: " & objItem.Password  & VbCrLf 
    KeyInfo = KeyInfo &  "PNPDeviceID: " & objItem.PNPDeviceID  & VbCrLf 
    KeyInfo = KeyInfo &  "PowerManagementCapabilities:"& objItem.PowerManagementCapabilities  & VbCrLf 
    KeyInfo = KeyInfo &  "PowerManagementSupported: " & objItem.PowerManagementSupported  & VbCrLf 
    KeyInfo = KeyInfo &  "Status: " & objItem.Status  & VbCrLf 
    KeyInfo = KeyInfo &  "StatusInfo:"& objItem.StatusInfo & VbCrLf
    KeyInfo = KeyInfo &  "SystemCreationClassName: " & objItem.SystemCreationClassName  & VbCrLf 
    KeyInfo = KeyInfo &  "SystemName:"& objItem.SystemName & VbCrLf 
    KeyInfo = KeyInfo & "###########################################" &vbCrlf &vbCrlf
next
 
' Выводим результат на экран 
WScript.Echo KeyInfo
//**************************************************************
// Информация о клавиатуре
// Win32_Keyboard.js 
//**************************************************************
 
var objClass, colItems, KeyInfo, objItem, enumItems
 
// Получаем доступ к классу и пространству имен
objClass = GetObject("WinMgmts:\\\\.\\Root\\CIMV2:Win32_Keyboard");
// Формируем коллекцию экземпляров 
colItems = objClass.Instances_();
 
KeyInfo= "Информация о клавиатуре:\n\n"
 
// Получаем доступ к объекту Enumerator
enumItems = new Enumerator(colItems);
for (; !enumItems.atEnd(); enumItems.moveNext()) {
    var objItem = enumItems.item();
 
    KeyInfo += "Availability: " + objItem.Availability  + "\n"; 
    KeyInfo += "Caption: " + objItem.Caption  + "\n"; 
    KeyInfo += "ConfigManagerErrorCode: " + objItem.ConfigManagerErrorCode  + "\n"; 
    KeyInfo += "ConfigManagerUserConfig: " + objItem.ConfigManagerUserConfig  + "\n"; 
    KeyInfo += "CreationClassName:"+ objItem.CreationClassName  + "\n"; 
    KeyInfo += "Description: " + objItem.Description  + "\n"; 
    KeyInfo += "DeviceID: " + objItem.DeviceID  + "\n"; 
    KeyInfo += "ErrorCleared: " + objItem.ErrorCleared  + "\n"; 
    KeyInfo += "ErrorDescription: " + objItem.ErrorDescription  + "\n"; 
    KeyInfo += "InstallDate: " + objItem.InstallDate  + "\n"; 
    KeyInfo += "IsLocked: " + objItem.IsLocked  + "\n"; 
    KeyInfo += "LastErrorCode: " + objItem.LastErrorCode  + "\n"; 
    KeyInfo += "Layout: " + objItem.Layout  + "\n"; 
    KeyInfo += "Name: " + objItem.Name  + "\n"; 
    KeyInfo += "NumberOfFunctionKeys: " + objItem.NumberOfFunctionKeys  + "\n"; 
    KeyInfo += "Password: " + objItem.Password  + "\n"; 
    KeyInfo += "PNPDeviceID: " + objItem.PNPDeviceID  + "\n"; 
    KeyInfo += "PowerManagementCapabilities:"+ objItem.PowerManagementCapabilities  + "\n"; 
    KeyInfo += "PowerManagementSupported: " + objItem.PowerManagementSupported  + "\n"; 
    KeyInfo += "Status: " + objItem.Status  + "\n"; 
    KeyInfo += "StatusInfo:"+ objItem.StatusInfo + "\n";
    KeyInfo += "SystemCreationClassName: " + objItem.SystemCreationClassName  + "\n"; 
    KeyInfo += "SystemName:"+ objItem.SystemName + "\n"; 
    KeyInfo += "###########################################\n\n";
}
 
// Выводим результат на экран 
WScript.Echo(KeyInfo);

Если вы не любитель писать сценарии, то аналогичную информацию о клавиатуре можно получить в командной строке с помощью утилиты WMIC. Просто введите следующую команду:

WMIC PATH Win32_Keyboard

Результат будет отображаться в виде таблицы, при желании его можно направить во внешний файл:

WMIC PATH Win32_Keyboard>"Путь к текстовому файлу"

И напоследок, что бы быстро получить описание самого класса Win32_Keyboard, пропишите в командной строке:

Wmic CLASS Win32_Keyboard GET

При желании можно направить вывод во внешний файл, сам вывод данных происходит в виде HTML разметки.

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий