我写了一个程序,它会根据我是否在开会而改变我的灯光。检测这一点的最简单方法是检查麦克风是否开着。目前,我检查屏幕(OpenCv)上是否出现麦克风图标:
我相信这不是最理想的解决方案。Java中是否有任何方法来检测正在使用麦克风的事实?
发布于 2022-06-30 11:50:06
多亏了埃斯坎达·阿贝迪尼,我才能做到!以下是整个代码:
public enum RegistryType {
MICROPHONE("microphone"),
WEBCAM("webcam");
private final String pathValue;
RegistryType(String pathValue) {
this.pathValue = pathValue;
}
public String getNonPackagePath() {
return "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\CapabilityAccessManager\\ConsentStore\\" + pathValue + "\\NonPackaged";
}
}
public class RegistryManager {
private static final String LAST_USED_TIME_STOP = "LastUsedTimeStop";
private static final Long LAST_USED_TIME_STOP_VALUE = 0L;
private RegistryManager() {
}
public static boolean isMicrophoneWorking() {
return isDeviceWorking(MICROPHONE);
}
public static boolean isWebcamWorking() {
return isDeviceWorking(WEBCAM);
}
private static boolean isDeviceWorking(final RegistryType registryType) {
final String[] folders = Advapi32Util.registryGetKeys(WinReg.HKEY_CURRENT_USER, registryType.getNonPackagePath());
return Arrays.stream(folders)
.map(folder -> registryType.getNonPackagePath() + "\\" + folder)
.map(register -> Advapi32Util.registryGetLongValue(WinReg.HKEY_CURRENT_USER, register, LAST_USED_TIME_STOP))
.anyMatch(lastUsedTimeStop -> LAST_USED_TIME_STOP_VALUE.compareTo(lastUsedTimeStop) >= 0);
}
}
发布于 2022-06-13 21:19:25
几年前,我在研究如何通过网络传输音频,我写了一个简单的丑陋的项目。
为了检查麦克风是否准备好使用,我用了:
javax.sound.sampled.TargetDataLine microphone = AudioSystem.getTargetDataLine(null);
if (!microphone.isOpen()) {
// ...
}
也许这是一个有点无用的信息,但我希望它可以是有用的方向!
发布于 2022-06-14 11:22:55
您可以检查Windows注册表、检查托盘或其他麦克风使用方式
注:
微软警告说,桌面应用程序可以在不通知Windows的情况下录制声音。因为它们不受Microsoft Store应用程序的沙箱限制,所以桌面程序可以直接与您的麦克风硬件接口。这意味着恶意软件可以在Windows不知情的情况下进行记录,因此它不会出现在列表中,也不会显示系统托盘中的麦克风图标。
https://stackoverflow.com/questions/71956625
复制相似问题