WMI: сортировка по порядку подключения с WMI - PullRequest
0 голосов
/ 16 июня 2020

В настоящее время я использую 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 подключен перед другой, он должен иметь более низкий индекс и наоборот.

Возможно ли это? Есть ли какие-то свойства, которые я мог бы использовать для сортировки по порядку подключения ?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...