Detectar Webcam si esta encendida o no


05 de Octubre del 2015

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


Ivan
12 de Agosto del 2026

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 , 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