如何在WPF项目中用AppRecordingManager启用录屏?解决CanRecord为false问题
解决WPF中使用AppRecordingManager录屏时CanRecord为false的问题
首先,你遇到的CanRecord=false且提示用户设置禁用的问题,主要是系统权限未开启和应用缺少必要的能力声明导致的,下面分步骤解决:
1. 启用系统屏幕录制权限
UWP的AppRecordingManager依赖Windows系统的屏幕录制权限,需要先在系统设置中开启:
- 按下
Win+I打开Windows设置,进入隐私和安全性 > 屏幕录制 - 确保顶部的「允许应用访问屏幕录制」总开关处于开启状态
- 在下方的应用列表中找到你的WPF程序,开启它的屏幕录制权限(如果没看到你的应用,先运行一次程序,然后重启设置页面再查看)
2. 配置应用的能力声明
因为你的WPF应用要调用UWP的录屏API,需要添加对应的权限声明:
方法一:通过可视化编辑器添加
- 右键你的WPF项目 → 添加 → 新建项 → 搜索并选择「Package 清单」(即
Package.appxmanifest) - 打开这个清单文件,切换到「功能」选项卡
- 勾选以下选项:
- 屏幕录制(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
相关产品推荐
相关产品推荐

