我试图弄清楚如何检查网络摄像头/视频捕获设备是否已被另一个应用程序使用,而无需实际激活它。
我当前的方法是使用 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,我也无法找到检查状态的方法。我需要在这里施展什么魔法吗?
Thanks
托比亚斯·廷普
我不完全确定这是否对您有帮助,但我发现您的问题是因为我想编写一个自定义应用程序来控制我的忙碌灯。这在很大程度上是“在我的机器上运行”认证的 - 这并不是试图给出一般性答案。但是,我认为它可能对您有所帮助,并且可能对下一个在谷歌搜索时看到此页面的人有所帮助......
private static bool IsWebCamInUse()
{
using (var key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\webcam\NonPackaged"))
{
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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)