В настоящее время я использую WMI
для обнаружения устройств камер, подключенных к моему Windows P C:
public static List<CameraDevice> GetAllConnectedCameras()
{
var cameras = new List<CameraDevice>();
using (var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity WHERE (PNPClass = 'Image' OR PNPClass = 'Camera')"))
{
foreach (var device in searcher.Get())
{
cameras.Add(new CameraDevice()
{
Name = device["Caption"].ToString(),
Status = device["Status"].ToString(),
DeviceId = device["DeviceId"].ToString()
});
}
}
return cameras;
}
public class CameraDevice
{
public int OpenCvId { get; set;}
public string Name { get; set; }
public string DeviceId { get; set; }
public string Status { get; set; }
}
С выводом:
[
{
"Name": "Microsoft LifeCam Cinema",
"DeviceId": "USB\\VID_045E&PID_0812&MI_00\\7&2E33922C&0&0000",
"Status": "OK"
},
{
"Name": "FLIR USB Video",
"DeviceId": "USB\\VID_09CB&PID_1007&MI_00\\6&1E15415F&0&0000",
"Status": "OK"
}
]
Однако, если Я отключаю и снова подключаю одно из этих двух устройств, или если я перезагружаю компьютер, их порядок подключения меняется. Я знаю это, потому что использую эти методы вместе с OpenCvSharp
, который позволяет подключаться к камере только по ее типу индекса (и не предоставляет для этого перечисление). OpenCvSharp
упорядочивает каждую камеру по последовательности ее подключения к системе, я бы хотел получить то же самое с WMI.
Итак, если Microsoft LifeCam Cinema
подключен перед другой, он должен иметь более низкий индекс и наоборот.
Возможно ли это? Есть ли какие-то свойства, которые я мог бы использовать для сортировки по порядку подключения ?
Спасибо!