C#获取网络摄像头名称列表

Posted

技术标签:

【中文标题】C#获取网络摄像头名称列表【英文标题】:C# Getting a list of names of the webcams 【发布时间】:2017-03-07 18:45:48 【问题描述】:

我找了好几天都没有用。我试图简单地将图像设备名称(即使用 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());
     

【问题讨论】:

查看 aforge 我假设注册表会有这些信息 这在***.com/questions/14771997/how-to-find-webcam之前已经问过了 该线程没有回答问题...将相机设备列出到文本文件 【参考方案1】:

正如我回答 in this question 一样,您可以使用 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;

【讨论】:

【参考方案2】:

我有几条路线供您查看。

尝试添加对 Interop.WIA.dll(Microsoft Windows 图像采集库)的引用并使用以下代码枚举设备。然后,您可以使用设备属性过滤相关的。

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());
            
        
    

如果这不起作用,您可以随时尝试使用 Microsoft 工具 DEVCON。 DEVCON 允许从命令行管理设备。您可以尝试使用适当的标志调用它并读取输出。 (http://www.robvanderwoude.com/devcon.php)

【讨论】:

感谢 Jon....遇到了一些 lbxDevices 错误..通过这些错误查看是否可行.... lbxDevices 是我正在填充的设备列表。您应该能够将其替换为您正在做的任何其他事情。突出的部分是填充该列表的其余部分。 抱歉,我是 C# 新手...我只想在控制台中列出它们。 @BradJarrett,我更新了代码。这就是输出所有 COM 对象名称的整个程序。然后,您可以根据每个 DeviceInfo 的属性进行过滤。例如,您可以if (deviceManager1.DeviceInfos[i].Type != WiaDeviceType.ScannerDeviceType) continue; @ Jon S,它可以按需要工作,但只在成像设备中获取前两个设备......仅在成像设备区域就有 4 个。

以上是关于C#获取网络摄像头名称列表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 opencv 获取网络摄像头设备列表?

将处理后的视频从 C# 程序发送到 C++ 程序

如何使用 C# 流式传输网络摄像头视频? [关闭]

C#,Emgu 网络摄像头 - 选择捕获大小

C# 外接(网口)双摄像头视频获取

C# 外接(网口)双摄像头视频获取