Como detectar si la web cam esta encendida, quisiera hacer un programita tipo demonio que detecta en el momento en que se enciende la camara web, aqui hay una programacion que estaba desarrollando gracias a un ejemplo lo comparto:
Imports AForge.Video.DirectShow
Imports AForge.Video
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.Text
Imports System.Windows.Forms
Imports System.Threading
Imports AForge
Imports AForge.Imaging
Imports AForge.Video.VFW
Imports AForge.Vision.Motion
Sub Busca_Dispositivos()
Disp_Video = New FilterInfoCollection(FilterCategory.VideoInputDevice)
If Disp_Video.Count = 0 Then
Dispositivos_Disponibles = False
Else
Dispositivos_Disponibles = True
Carga_Dispositivos()
Button_iniciar.Enabled = True
End If
End Sub
Sub Carga_Dispositivos()
For i As Integer = 0 To Disp_Video.Count - 1
combo_dispositivos.Items.Add(Disp_Video(i).Name.ToString())
Next
combo_dispositivos.Text = combo_dispositivos.Items(0).ToString()
End Sub
Private Sub Tim_audit_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Tim_audit.Tick
Try
Carga_Dispositivos()
Busca_Dispositivos()
If FuenteDeVideo.IsRunning Then
Label2.Text = "Activo"
Else
Label2.Text = "NO Activo"
End If
Catch ex As Exception
Label2.Text = "NO Activo"
End Try
End Sub
Hola,
Con AForge.NET, la propiedad IsRunning del objeto VideoCaptureDevice te dice si el dispositivo está capturando en ese momento:
Imports AForge.Video.DirectShow
Imports AForge.Video
Dim dispositivoVideo As VideoCaptureDevice
Sub IniciarDeteccion()
Dim dispositivos As New FilterInfoCollection(FilterCategory.VideoInputDevice)
dispositivoVideo = New VideoCaptureDevice(dispositivos(0).MonikerString)
AddHandler dispositivoVideo.NewFrame, AddressOf CuandoLlegaFrame
dispositivoVideo.Start()
End Sub
Sub ComprobarEstado()
If dispositivoVideo IsNot Nothing AndAlso dispositivoVideo.IsRunning Then
Console.WriteLine("La camara esta encendida")
Else
Console.WriteLine("La camara esta apagada")
End If
End Sub
Un matiz importante para tu «programita tipo demonio»: IsRunning te dice si tú, desde tu programa, has llamado a Start() y el dispositivo está activo en tu proceso. Si lo que quieres detectar es que otra aplicación distinta (Zoom, Teams, OBS...) ha encendido la webcam, eso ya no lo puedes ver con AForge, porque un dispositivo de vídeo en Windows normalmente solo lo puede tener abierto un proceso a la vez (salvo hardware/drivers que soporten multi-acceso), así que si otra app la está usando, tu propio Start() probablemente falle con una excepción en vez de darte información útil.
Para ese segundo caso (saber si CUALQUIER proceso, no solo el tuyo, está usando la cámara), en Windows 10/11 hay una vía más fiable: consultar el registro en HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionCapabilityAccessManagerConsentStorewebcam, donde el sistema operativo guarda qué aplicaciones tienen acceso activo a la cámara en cada momento. Es una API no oficial (no documentada por Microsoft para este uso), pero es el mecanismo que usan la mayoría de herramientas de terceros que muestran «quién está usando tu cámara ahora mismo».
Ivan