You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在UWP C#中检测麦克风占用状态及占用应用?

检测UWP中占用麦克风的具体应用

要检测哪个应用正在使用麦克风,你可以结合MediaCapture初始化尝试和DeviceInformation属性查询实现,以下是具体方案:

1. 通过MediaCapture捕获失败判断占用状态

当麦克风被其他应用独占使用时,尝试初始化MediaCapture会抛出UnauthorizedAccessException,捕获该异常后即可进一步查询占用应用:

private async Task CheckMicrophoneUsage()
{
    var microphoneDevice = await GetMicrophoneDeviceAsync();
    if (microphoneDevice == null || !microphoneDevice.IsEnabled)
    {
        await new MessageDialog("未检测到可用麦克风设备").ShowAsync();
        return;
    }

    MediaCapture tempCapture = null;
    try
    {
        tempCapture = new MediaCapture();
        await tempCapture.InitializeAsync(new MediaCaptureInitializationSettings
        {
            AudioDeviceId = microphoneDevice.Id,
            StreamingCaptureMode = StreamingCaptureMode.Audio
        });
        // 初始化成功,说明麦克风未被占用
        await new MessageDialog("麦克风当前未被任何应用占用").ShowAsync();
    }
    catch (UnauthorizedAccessException)
    {
        // 麦克风被占用,查询具体应用
        var appInfo = await GetCurrentMicrophoneUsingAppAsync(microphoneDevice);
        if (appInfo != null)
        {
            await new MessageDialog($"麦克风正在被以下应用占用:\n应用名称:{appInfo.Item1}\n应用ID:{appInfo.Item2}").ShowAsync();
        }
        else
        {
            await new MessageDialog("麦克风被占用,但无法获取应用信息").ShowAsync();
        }
    }
    finally
    {
        tempCapture?.Dispose();
    }
}

2. 查询占用麦克风的应用信息

通过DeviceInformation的属性集合获取当前使用麦克风的应用ID,再通过PackageManager获取对应的应用名称:

private async Task<Tuple<string, string>> GetCurrentMicrophoneUsingAppAsync(DeviceInformation micDevice)
{
    // 获取当前捕获音频的应用ID
    if (micDevice.Properties.TryGetValue("System.Device.Audio.CurrentCaptureApplication", out var appIdObj) && appIdObj is string appId)
    {
        PackageManager packageManager = new PackageManager();
        try
        {
            var package = await packageManager.FindPackageByIdAsync(appId);
            return Tuple.Create(package.DisplayName, appId);
        }
        catch (Exception)
        {
            // 桌面应用无法通过PackageManager获取名称,直接返回ID
            return Tuple.Create("未知桌面应用", appId);
        }
    }
    return null;
}

3. 权限配置

务必在Package.appxmanifest中添加麦克风权限:

<Capabilities>
    <DeviceCapability Name="microphone" />
</Capabilities>

注意事项

  • 该方案可检测大部分UWP应用和Win32应用的麦克风占用情况,部分特殊系统进程可能无法获取完整信息
  • 建议降低定时器检测频率(比如10秒一次),避免频繁初始化MediaCapture影响系统性能

内容的提问来源于stack exchange,提问作者Smit Rathod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 02:13:14