在C#中获取网络摄像头的当前状态



我正试图找出如何在不实际激活的情况下检查网络摄像头/视频捕获设备是否已被另一个应用程序使用。

我目前的方法是使用AForge.NET库并使用VideoCaptureDevice对象的.IsRunning属性,如下所示:

var videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);

foreach (FilterInfo videoDevice in videoDevices)
{
VideoCaptureDevice camera new AForge.Video.DirectShow.VideoCaptureDevice(videoDevice.MonikerString);
Debug.Print(camera.IsRunning)
}

我想IsRunning属性只适用于已使用库启动的VideoCaptureDevices,并且我需要对该设备进行较低级别的DirectShow访问。

虽然有很多方法可以在C#中使用DirectShow,但即使在C++中使用DirectShow,我也无法找到检查状态的方法。我需要在这里表演魔术吗?

感谢

Tobias Timpe

我不完全确定这是否对你有帮助,但我发现了你的问题,因为我想写一个自定义应用程序来控制我的忙碌。这是非常"在我的机器上工作"的认证——这不是试图给出一个一般的答案。然而,我认为它可能会帮助你,也可能会帮助下一个在谷歌上看到这个页面的人。。。

private static bool IsWebCamInUse()
{
using (var key = Registry.CurrentUser.OpenSubKey(@"SOFTWAREMicrosoftWindowsCurrentVersionCapabilityAccessManagerConsentStorewebcamNonPackaged"))
{
foreach (var subKeyName in key.GetSubKeyNames())
{
using (var subKey = key.OpenSubKey(subKeyName))
{
if (subKey.GetValueNames().Contains("LastUsedTimeStop"))
{
var endTime = subKey.GetValue("LastUsedTimeStop") is long ? (long) subKey.GetValue("LastUsedTimeStop") : -1;
if (endTime <= 0)
{
return true;
}
}
}
}
}
return false;
}

最新更新