c# - 如何获取avicap32.dll中已连接的网络摄像头列表?

标签 c# .net winapi webcam

我正在编写一个应用程序来处理网络摄像头。我必须使用(这是一个外部约束)avicap32.dll 库。所以我在这里使用这个库中的一些外部函数(我必须为其编码类型)以及 user32 (发送 WindowsMessages)。我翻遍了互联网,但没有找到如何获取所有已连接的网络摄像头设备的列表?

当然我完全了​​解功能:

[DllImport(avicap32dll)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool capGetDriverDescription(
    short driverIndex,
    StringBuilder name, int nameSize,
    StringBuilder version, int versionSize);

,但它给了我驱动程序列表,而不是摄像头!当我将两台相机连接到我的电脑时,通过此函数我仍然只能找到一个捕获驱动程序(检查 driverIndex 从 0 到 9)。它们必须使用相同的捕获驱动程序。因此,由于没有网络摄像头列表,我无法真正决定要连接哪一个。有一个 WindowsMessage WM_CAP_DLG_VIDEOSOURCE,但在我连接网络摄像头之前它不显示视频源对话框。

最佳答案

这是旧版 API(Windows 视频,avicap32.dll),它并不像您期望的那么灵活。但仍然受到支持。

具有最佳覆盖范围的较新 API 是 DirectShow,它是 native 的,但使用 DirectShow.NET,您可以连接到 .NET。查看介绍此方法的代码示例和文章:Finding Your Web Cam with C# & DirectShow.NET

编辑:原始文章已不存在,但在互联网文件馆中找到了副本 https://archive.org/web/

关于c# - 如何获取avicap32.dll中已连接的网络摄像头列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13058161/

相关文章:

c# - 如何用c#读取包含逗号的sql列作为一个字段

c# - 错误 CS1061 : 'DbSet<T>' does not contain a definition for 'FromSql' and no extension method 'FromSql' accepting a first argument of type 'DbSet<T>'

c# - VirtualPathUtility.IsAbsolute(path) 在路径包含参数时抛出异常

c# - 在 C# 中对数据进行分组和进行聚合计算

c# - 将 .nupkg 文件检入源代码管理 - 如何在构建时恢复?

winapi - 在 Windows 上用 C 进行直接 GDI 编程

c# - 网络共享/SMB 客户端

c# - Linq 可选参数

c++ - Windows下"Standard I/O only"权限

c++ - SetCursorPos 和 GetCursorPos 在登录屏幕上不起作用?