Класс Win32_Keyboard происходит от класса CIM_Keyboard и позволяет получить информацию о клавиатуре, установленной в системе. Оба класса содержат 23 свойства и два метода — Reset и SetPowerState; оба метода не являются реализованными, то есть, их нельзя использовать.
Прежде чем приступать к описанию свойств Win32_Keyboard, давайте рассмотрим его с помощью утилиты CIM Studio.
Видим, что ключевым свойством является DeviceID, то есть, для получения конкретного экземпляра класса Win32_Keyboard с помощью метода GET, нам нужно будет указывать значение именно этого свойство, что не очень удобно (почему, объясню далее). Ассоциативных связей у класса нет. Сам класс предоставляется провайдером Win32, динамическая библиотека Cimwin32.dll, MOF файл Cimwin32.mof, пространство имен CIMV2.
На данный момент я работаю на ноутбуке, его родная клавиатура функционирует лишь частично – не работают некоторые кнопки, это уже второй раз такая неудача; первый раз я угробил клавиатуру пролив на нее пиво, второй – слишком часто чистил и в итоге попортил шлейф (я ее снимал). Поэтому, к ноутбуку подключена USB клавиатура, честно говоря, так даже удобнее работать.
Исходя из выше сказанного следует, что на данный момент у класса Win32_Keyboard должны быть два экземпляра, в которых хранится информация о клавиатуре – внешней и встроенной. В утилите CIM Studio это прекрасно видно (выбираем метод Win32_Keyboard и нажимаем на кнопку Instances).
В первой колонке показаны значения свойства 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 разметки.