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

如何在WPF项目中用AppRecordingManager启用录屏?解决CanRecord为false问题

解决WPF中使用AppRecordingManager录屏时CanRecord为false的问题

首先,你遇到的CanRecord=false且提示用户设置禁用的问题,主要是系统权限未开启和应用缺少必要的能力声明导致的,下面分步骤解决:

1. 启用系统屏幕录制权限

UWP的AppRecordingManager依赖Windows系统的屏幕录制权限,需要先在系统设置中开启:

  • 按下Win+I打开Windows设置,进入隐私和安全性 > 屏幕录制
  • 确保顶部的「允许应用访问屏幕录制」总开关处于开启状态
  • 在下方的应用列表中找到你的WPF程序,开启它的屏幕录制权限(如果没看到你的应用,先运行一次程序,然后重启设置页面再查看)

2. 配置应用的能力声明

因为你的WPF应用要调用UWP的录屏API,需要添加对应的权限声明:

方法一:通过可视化编辑器添加

  1. 右键你的WPF项目 → 添加 → 新建项 → 搜索并选择「Package 清单」(即Package.appxmanifest)
  2. 打开这个清单文件,切换到「功能」选项卡
  3. 勾选以下选项:
    • 屏幕录制(Screen Recording)
    • 视频库(Videos Library)

方法二:手动编辑XML

如果可视化编辑器不方便,直接编辑Package.appxmanifest的XML内容,在<Capabilities>节点下添加:

<Capability Name="screenRecording" />
<Capability Name="videosLibrary" />

3. 代码优化建议

在你的StartRecordingAsync方法中,当CanRecord为false时,建议添加提示逻辑,引导用户去开启权限:

public async Task StartRecordingAsync(string fileName)
{
    AppRecordingManager manager = AppRecordingManager.GetDefault();
    var status = manager.GetStatus();
    
    if (!status.CanRecord && !status.CanRecordTimeSpan)
    {
        // 提示用户检查屏幕录制权限
        MessageBox.Show("无法录制:请在系统设置的「隐私和安全性 > 屏幕录制」中开启本应用的权限", "权限不足", MessageBoxButton.OK, MessageBoxImage.Warning);
        return;
    }
    
    // 后续你的录制逻辑...
    var myVideo = await StorageLibrary.GetLibraryAsync(KnownLibraryId.Videos);
    StorageFolder projectFolder = await myVideo.SaveFolder.CreateFolderAsync("DataFolder", CreationCollisionOption.OpenIfExists);
    var audio = await projectFolder.CreateFileAsync(fileName, CreationCollisionOption.GenerateUniqueName);
    var result = await manager.StartRecordingToFileAsync(audio).AsTask<AppRecordingResult>(CTS.Token);
    
    IsRecording = result.Succeeded;
}

额外注意事项

  • 修改权限后需要重启你的WPF应用,确保权限变更生效
  • 如果你是通过桌面桥(MSIX)打包应用,确保打包时包含了上述的能力声明,否则权限会不生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 17:12:49