none
Ejemplos con DirectShow .NET en vb.NET 2010

    Pregunta

  • Hola Buenos días, estoy utilizando la librería DirectShow .NET pero deseo saber si alguien tiene por alli un ejemplito de esta librería para reflejar la descripción de mi Webcam en un label, osea que que si tengo una webcam en la pc conectada me de la posibilidad de poder reflejar en en un label una descripción de este hardware con el dll DirectShow .NET, pues e conseguido ejemplos, pero con otro dll.

    https://social.msdn.microsoft.com/Forums/es-ES/5a97c089-35bf-4dbe-86fb-b92d8077c5d2/saber-si-la-web-cam-esta-activada-en-c?forum=vcses

    Espero me puedan orientar

    miércoles, 19 de octubre de 2016 11:27

Respuestas

  • Cuando enumeras las webcams, vas recuperando un moniker. Con el moniker seleccionado (o con cada uno de ellos), llamas a BindToStorage para recuperar una implementación de IPropertyBag.

    Una vez que tienes el "property bag", lees las propiedades "FriendlyName", "Description" y/o "DevicePath". Las webcams no traen la propiedad "Description", según entiendo leyendo la doc, así que tendrás que conformarte con su nombre y/o el identificador (el "DevicePath").

    Si no te das maña para esto y  pones la sección de código en donde obtienes el moniker del "source filter", yo te escribo lo que te falta... serán dos o tres líneas.

    Imports System.Runtime.InteropServices
    Imports System.Runtime.InteropServices.ComTypes
    
    'http://sourceforge.net/projects/directshownet/files/
    Imports DirectShowLib
    
    Public Class Form1
        Private IID_IPropertyBag As New Guid("55272A00-42CB-11CE-8135-00AA004BB851")
        Const S_OK = 0
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
            Dim DevEnum As New CreateDevEnum()
            Dim pDevEnum As ICreateDevEnum = DirectCast(DevEnum, ICreateDevEnum)
            Dim pMoniker As IMoniker() = New IMoniker(0) {}
            Dim pClassEnum As IEnumMoniker = Nothing
            Dim pSrc As Object = Nothing
            Dim pPBag As Object = Nothing
    
            pDevEnum.CreateClassEnumerator(FilterCategory.VideoInputDevice, pClassEnum, CDef.ClassDefault)
    
            While (pClassEnum.[Next](1, pMoniker, IntPtr.Zero) = S_OK)
                pMoniker(0).BindToStorage(Nothing, Nothing, IID_IPropertyBag, pPBag)
    
                ' propiedades del dispositivo
                Dim bag As IPropertyBag = DirectCast(pPBag, IPropertyBag)
    
                Dim nombre As String = String.Empty
                Dim descripcion As String = String.Empty
                Dim devPath As String = String.Empty
    
                bag.Read("FriendlyName", nombre, Nothing)
                bag.Read("Description", descripcion, Nothing)
                bag.Read("DevicePath", devPath, Nothing)
    
                ListBox1.Items.Add(New With {.FriendlyName = nombre, .Description = descripcion, .DevicePath = devPath})
    
                Marshal.ReleaseComObject(pMoniker(0))
                Marshal.ReleaseComObject(pPBag)
            End While
    
            Marshal.ReleaseComObject(pClassEnum)
            Marshal.ReleaseComObject(pDevEnum)
            Marshal.ReleaseComObject(DevEnum)
    
            If ListBox1.Items.Count > 0 Then
                ListBox1.SelectedIndex = 0
                ListBox1.DisplayMember = "FriendlyName"
                Label1.DataBindings.Add("Text", ListBox1.SelectedItem, "Description")
                Label2.DataBindings.Add("Text", ListBox1.SelectedItem, "DevicePath")
            End If
    
        End Sub
    End Class
    


    miércoles, 19 de octubre de 2016 13:38