# 2024-04-17: Stole changese from @Timmo on stackoverflow to get this working with Windows Apps import winreg class WebcamDetect: REG_KEY = winreg.HKEY_CURRENT_USER WEBCAM_REG_SUBKEY = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\CapabilityAccessManager\\ConsentStore\\webcam\\" WEBCAM_TIMESTAMP_VALUE_NAME = "LastUsedTimeStop" def __init__(self): self._regKey = winreg.OpenKey( WebcamDetect.REG_KEY, WebcamDetect.WEBCAM_REG_SUBKEY ) def getActiveApps(self): """Returns a list of apps that are currently using the webcam.""" def get_subkey_timestamp(subkey) -> int: """Returns the timestamp of the subkey""" try: value, _ = winreg.QueryValueEx(subkey, WebcamDetect.WEBCAM_TIMESTAMP_VALUE_NAME) return value except OSError: pass return None active_apps = [] try: key = winreg.OpenKey(WebcamDetect.REG_KEY, WebcamDetect.WEBCAM_REG_SUBKEY) # Enumerate over the subkeys of the webcam key subkey_count, _, _ = winreg.QueryInfoKey(key) # Recursively open each subkey and check the "LastUsedTimeStop" value. # A value of 0 means the camera is currently in use. for idx in range(subkey_count): subkey_name = winreg.EnumKey(key, idx) subkey_name_full = f"{WebcamDetect.WEBCAM_REG_SUBKEY}\\{subkey_name}" subkey = winreg.OpenKey(WebcamDetect.REG_KEY, subkey_name_full) if subkey_name == "NonPackaged": # Enumerate over the subkeys of the "NonPackaged" key subkey_count, _, _ = winreg.QueryInfoKey(subkey) for np_idx in range(subkey_count): subkey_name_np = winreg.EnumKey(subkey, np_idx) subkey_name_full_np = f"{WebcamDetect.WEBCAM_REG_SUBKEY}\\NonPackaged\\{subkey_name_np}" subkey_np = winreg.OpenKey(WebcamDetect.REG_KEY, subkey_name_full_np) if get_subkey_timestamp(subkey_np) == 0: active_apps.append(subkey_name_np) else: if get_subkey_timestamp(subkey) == 0: active_apps.append(subkey_name) winreg.CloseKey(subkey) winreg.CloseKey(key) except OSError: pass return active_apps def isActive(self): return len(self.getActiveApps()) > 0