2

我已经搜索了几天无济于事。我试图简单地将图像设备名称(即使用 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());
     }
4

2 回答 2

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;
}
于 2020-06-01T08:46:15.840 回答
-1

我有几条路线供您查看。

尝试添加对 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

于 2017-03-07T19:19:19.427 回答