UWP应用中如何编程阻止Windows屏幕共享时捕获系统通知?
在UWP屏幕共享中阻止系统通知被捕获的方案
核心实现思路
UWP原生屏幕捕获框架没有直接屏蔽系统通知的专属API,但可以通过两种实用方式达成隐私保护需求:
方法一:通过捕获区域规避通知显示区
Windows系统通知默认固定在屏幕右下角(任务栏通知区域上方),你可以通过限定捕获范围避开该区域:
- 获取当前主屏的分辨率与DPI信息,计算出通知区域的大致范围(通常为屏幕右侧300-350px宽度、从顶部向下约100px起的区域)
- 调用屏幕捕获API时,指定排除该区域的矩形范围,而非捕获全屏
- 示例代码片段:
// 获取当前屏幕的原始像素尺寸 var displayInfo = DisplayInformation.GetForCurrentView(); var screenWidth = displayInfo.ScreenWidthInRawPixels; var screenHeight = displayInfo.ScreenHeightInRawPixels; // 定义排除通知区域后的捕获矩形(示例:右侧预留320px宽度给通知) var captureArea = new Rect(0, 0, screenWidth - 320, screenHeight); // 绑定捕获区域到屏幕捕获源 var screenCaptureSource = new ScreenCaptureSource(); screenCaptureSource.CaptureRegion = captureArea;
方法二:临时禁用系统Toast通知
通过Windows Runtime的Toast通知管理API,在共享期间临时关闭所有系统通知,结束后恢复原有设置:
- 先保存用户当前的通知配置,再将全局通知设置改为禁用
- 共享结束后立即恢复原配置,避免影响用户日常使用
- 示例代码片段:
// 保存用户原有的通知设置 var originalNotificationSetting = ToastNotificationManagerCompat.Configuration; // 临时禁用所有Toast通知 ToastNotificationManagerCompat.Configuration = NotificationSetting.Disabled; // 屏幕共享结束后,恢复用户原有的通知设置 ToastNotificationManagerCompat.Configuration = originalNotificationSetting;
注意事项
- 方法一需兼容不同屏幕分辨率、DPI及用户自定义通知位置的场景,建议提供手动调整捕获区域的入口
- 方法二会禁用所有应用的Toast通知,需在共享启动前明确告知用户,避免引发误解
- 若需更精准控制,可结合Windows辅助功能API监听通知弹出事件,动态调整捕获区域
内容的提问来源于stack exchange,提问作者Karthik
相关产品推荐
相关产品推荐

