【问题标题】:How can I determine if a webcam is in use on Windows 10 without activating the camera?如何在不激活摄像头的情况下确定 Windows 10 上是否正在使用网络摄像头?
【发布时间】:2020-07-22 18:19:23
【问题描述】:

在 Windows 10 上,如何确定连接的网络摄像头当前是否处于活动状态,而无需打开摄像头(如果它已关闭)?

目前,我可以尝试使用相机拍照,如果失败,则假定相机正在使用中。但是,这意味着摄像头的活动 LED 将打开(因为摄像头现在正在使用中)。由于我想每隔几秒检查一次摄像头的状态,所以用这种方法来判断摄像头是否在使用中是不可行的。

我同时使用了 Win32 和 UWP 标签,并且将接受使用任一 API 的解决方案。

【问题讨论】:

    标签: windows winapi uwp


    【解决方案1】:

    我发现了一条提示 here,其中提到了在使用网络摄像头时,Computer\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\webcam\NonPackaged 下的注册表项会发生变化。

    这里有一些键可以跟踪应用程序何时使用网络摄像头的时间戳。当网络摄像头正在使用中时,“LastUsedTimeStop”似乎为 0,因此要判断网络摄像头是否正在使用中,我们可以简单地检查是否有任何应用程序的 LastUsedTimeStop==0。

    这是一个快速的 Python 类,用于轮询注册表以了解网络摄像头的使用情况: https://gist.github.com/cobryan05/8e191ae63976224a0129a8c8f376adc6

    示例用法:

    import time
    from webcamDetect import WebcamDetect
    webcamDetect = WebcamDetect()
    while True:
        print("Applications using webcam:")
        for app in webcamDetect.getActiveApps():
            print(app)
        print("---")
        time.sleep(1)
    

    【讨论】:

      【解决方案2】:

      好问题,但恐怕没有这样的api来返回每秒的相机状态,经过研究我发现了类似的案例here,我们的会员提供了一个示例方法来检测相机状态FileLoadException,我认为这是目前检查相机状态的唯一方法。

      【讨论】:

      • 如果我错了,请纠正我,但是您链接到的解决方案依赖于 StartPreviewAsync 方法,如果它是,它将打开相机(并因此触发活动 LED)调用方法时关闭。
      • 是的,如果其他应用正在使用摄像头,则 LED 将保持亮起,StartPreviewAsync 将从摄像头获取帧,这将导致摄像头处于活动状态。
      • @dstaley,如果答案有帮助,请考虑接受,谢谢。
      • 这里有同样的问题/问题。我不想启动相机,部分原因是我不希望它闪烁,但主要是因为我的启动预览可能会阻止预期的应用程序抓取相机。可惜没有办法检查凸轮专用是否可用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多