Exemple #1
0
        public static List <DeviceEnumerator> ListDevices(Guid filterType)
        {
            List <DeviceEnumerator> deviceEnumeratorList = new List <DeviceEnumerator>();
            IEnumMoniker            ppEnumMoniker;
            ErrorHandler            classEnumerator = (ErrorHandler)((ICreateDevEnum) new CreateDevEnum()).CreateClassEnumerator(filterType, out ppEnumMoniker, 0);

            if (ppEnumMoniker != null)
            {
                try
                {
                    IMoniker[] rgelt = (IMoniker[])null;
                    try
                    {
                        while (true)
                        {
                            DeviceEnumerator deviceEnumerator;
                            string           property;
                            do
                            {
                                rgelt = new IMoniker[1];
                                if (ppEnumMoniker.Next(1, rgelt, IntPtr.Zero) != 0)
                                {
                                    Logger.Info("Breaking out of loop..");
                                    goto label_11;
                                }
                                else
                                {
                                    deviceEnumerator = new DeviceEnumerator()
                                    {
                                        m_Moniker = rgelt[0]
                                    };
                                    deviceEnumerator.m_FriendlyName = deviceEnumerator.getProperty("FriendlyName");
                                    property = deviceEnumerator.getProperty("DevicePath");
                                }
                            }while (deviceEnumerator.m_FriendlyName == null || property == null || !property.Contains("\\usb#vid") && !property.Contains("\\pci#ven"));
                            deviceEnumeratorList.Add(deviceEnumerator);
                            Logger.Info("Camera device {0}", (object)deviceEnumerator.m_FriendlyName);
                        }
                    }
                    catch (Exception ex)
                    {
                        if (rgelt != null)
                        {
                            Marshal.ReleaseComObject((object)rgelt[0]);
                        }
                        deviceEnumeratorList = (List <DeviceEnumerator>)null;
                        Logger.Error("Failed to enumerate Video input devices: {0}", (object)ex.ToString());
                        throw;
                    }
                }
                finally
                {
                    Marshal.ReleaseComObject((object)ppEnumMoniker);
                }
            }
            else
            {
                Logger.Error("Cannot enumerate the device");
                deviceEnumeratorList = (List <DeviceEnumerator>)null;
            }
label_11:
            return(deviceEnumeratorList);
        }