Я пытаюсь программно обнаружить наличие USB Card Reader, которое идентифицирует себя как устройство с клавиатурой. В диспетчере устройств это выглядит так:
![Device Manager](https://i.stack.imgur.com/cg5mn.png)
Разница между реальной клавиатурой и кардридером только в идентификаторах устройств. У меня есть следующий код C# WMI:
ManagementObjectSearcher managementObjectSearcher = new ManagementObjectSearcher(@"Select * from Win32_Keyboard");
ManagementObjectCollection keyboards = managementObjectSearcher.Get();
foreach (ManagementBaseObject keyboard in keyboards)
{
Console.WriteLine();
foreach (var property in keyboard.Properties)
{
Console.WriteLine(string.Format("{0}: {1}", property.Name, property.Value));
}
}
Вывод, как и в диспетчере устройств, отличается только идентификаторами устройств:
Availability:
Caption: Enhanced (101- or 102-key)
ConfigManagerErrorCode: 0
ConfigManagerUserConfig: False
CreationClassName: Win32_Keyboard
Description: USB Input Device
DeviceID: USB\VID_04B3&PID_3025\5&DC4A972&0&3
ErrorCleared:
ErrorDescription:
InstallDate:
IsLocked:
LastErrorCode:
Layout: 00000409
Name: Enhanced (101- or 102-key)
NumberOfFunctionKeys: 12
Password:
PNPDeviceID: USB\VID_04B3&PID_3025\5&DC4A972&0&3
PowerManagementCapabilities:
PowerManagementSupported: False
Status: OK
StatusInfo:
SystemCreationClassName: Win32_ComputerSystem
SystemName: ALEX19
Availability:
Caption: Enhanced (101- or 102-key)
ConfigManagerErrorCode: 0
ConfigManagerUserConfig: False
CreationClassName: Win32_Keyboard
Description: USB Input Device
DeviceID: USB\VID_0804&PID_0040\5&DC4A972&0&6
ErrorCleared:
ErrorDescription:
InstallDate:
IsLocked:
LastErrorCode:
Layout: 00000409
Name: Enhanced (101- or 102-key)
NumberOfFunctionKeys: 12
Password:
PNPDeviceID: USB\VID_0804&PID_0040\5&DC4A972&0&6
PowerManagementCapabilities:
PowerManagementSupported: False
Status: OK
StatusInfo:
SystemCreationClassName: Win32_ComputerSystem
SystemName: ALEX19
Однако Windows Настройки показывают это устройство в качестве устройства чтения карт USB:
![Settings](https://i.stack.imgur.com/L385A.png)
Как я могу сделать то же самое, используя. NET или собственный Windows API? ОС - Windows 10 x64.
Примечание: этот ответ Как мне получить все считыватели смарт-карт в моей системе через WMI? предлагает использовать класс SmartCardReader
, но не У меня не работает, картридер не распознается.