C# Получение списка имен веб-камер

Я искал несколько дней безрезультатно. Я пытаюсь просто перечислить в текстовый файл имена устройств изображения, т.е. веб-камеры с использованием C#. Я знаю, что могу использовать System.IO.Ports для получения компортов, что я и делаю, но я не могу найти простой способ перечисления устройств изображения.

Мне удалось найти устройства WIA с этим кодом, но не с устройствами WIA:

    private static void DoWork()
    {
        var deviceManager1 = new DeviceManager();
        for (int i = 1; (i <= deviceManager1.DeviceInfos.Count); i++)
        {
           // if (deviceManager1.DeviceInfos[i].Type !=   
     WiaDeviceType.VideoDeviceType) { continue; }


     Console.WriteLine(deviceManager1.DeviceInfos[i].
     Properties["Name"].get_Value().  ToString());
     }

1 ответ

Как я ответил на этот вопрос, вы можете обойтись без внешних библиотек с помощью WMI.

добавлять using System.Management; а потом:

public static List<string> GetAllConnectedCameras()
{
    var cameraNames = new List<string>();
    using (var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity WHERE (PNPClass = 'Image' OR PNPClass = 'Camera')"))
    {
        foreach (var device in searcher.Get())
        {
            cameraNames.Add(device["Caption"].ToString());
        }
    }

    return cameraNames;
}

У меня есть пара маршрутов для вас, чтобы проверить.

Попробуйте добавить ссылку на Interop.WIA.dll (Microsoft Windows Image Acquisition Library) и использовать следующий код для перечисления устройств. Затем вы можете отфильтровать соответствующие, используя свойство устройства.

using System;
using WIA;

namespace ConsoleApplication1
{
class Program
{
    static void Main(string[] args)
    {
        DoWork();
        Console.ReadKey();
    }

    private static void DoWork()
    {
        var deviceManager1 = new DeviceManager();
        for (int i = 1; (i <= deviceManager1.DeviceInfos.Count); i++)
        {
            if (deviceManager1.DeviceInfos[i].Type == WiaDeviceType.CameraDeviceType|| deviceManager1.DeviceInfos[i].Type == WiaDeviceType.VideoDeviceType)
            {
                Console.WriteLine(deviceManager1.DeviceInfos[i].Properties["Name"].get_Value().ToString());
            }
        }
    }
}

}

Если это не сработает, вы всегда можете попробовать использовать DEVCON, который является инструментом Microsoft. DEVCON позволяет управлять устройством из командной строки. Вы можете попробовать вызвать его с соответствующими флагами и прочитать вывод. ( http://www.robvanderwoude.com/devcon.php)

Другие вопросы по тегам