2

WebCamsを処理するアプリケーションをコーディングしています。avicap32.dllライブラリを使用する必要があります(これは外部制約です)。したがって、ここでは、このライブラリのいくつかのextern関数(型をマーシャリングする必要があります)とuser32(WindowsMessagesを送信する)を使用しています。そして、私はインターネットの半分を掘り起こしましたが、接続されているすべてのWebCamデバイスのリストを取得する方法を見つけることができませんでしたか?

もちろん、私は機能を完全に知っています:

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

、しかしそれは私にカムではなくドライバーのリストを与えます!2台のカメラをPCに接続しても、この関数でキャプチャドライバーを1つしか見つけることができません(driverIndexを0から9までチェックします)。両方とも同じキャプチャドライバを使用している必要があります。そのため、Webカメラのリストがないため、どのWebカメラに接続するかを実際に決定することはできません。WindowsMessage WM_CAP_DLG_VIDEOSOURCEがありますが、WebCamに接続する前にビデオソースダイアログが表示されません。

4

2 に答える 2

3

これはレガシーAPI(Video for Windows、avicap32.dll)であり、期待できるほど柔軟ではありません。ただし、まだサポートされています。

最高のカバレッジを備えた新しいAPIはDirectShowであり、ネイティブですが、DirectShow.NETを使用すると、.NETへのブリッジがあります。このアプローチを紹介するコードサンプルと記事をご覧ください:C#とDirectShow.NETでWebカメラを見つける

編集:元の記事はもう存在しませんが、インターネットアーカイブhttps://archive.org/web/でコピーが見つかりました

于 2012-10-25T12:51:06.210 に答える
1

AForge.NETライブラリを使用する方が簡単で優れています。これらの種類のジョブを実行するためのすべてのツールが含まれていますhttp://aforgenet.com/

于 2015-06-09T17:52:10.050 に答える