【问题标题】:Is there a way to figure out whether some Windows application is capturing screen [duplicate]有没有办法确定某些 Windows 应用程序是否正在捕获屏幕 [重复]
【发布时间】:2021-10-28 23:33:45
【问题描述】:

目前我有 C# 应用程序,它利用 SetWindowDisplayAffinity,它应该防止选定的窗口通过将它们涂黑来捕获。但是,根据this post 看来,有些早期版本的 Windows 在这种机制中存在错误。

那么,是否有可能通过 pinvoke 或其他方式检测到当前正在捕获屏幕,以便在不调用系统 API 的情况下手动关闭我的窗口?

【问题讨论】:

  • 在一个带有高分辨率摄像头的智能手机很普遍的时代......你真的认为这值得吗?
  • 经验法则:如果用户可以查看,则用户可以复制。这只是想要投入多少努力来迫使用户自己投入努力的问题。
  • 更简单的方法是确认可以实现此功能的版本,并将您的应用程序从不支持的版本上运行列入黑名单,告诉用户请升级/更新。你不能期望自己构建比操作系统中已经内置的更好的机制来逃避屏幕捕获,即使这些机制也不是密封的——你不能直接与显示驱动程序/合成器交互,不像操作系统。

标签: c# winapi pinvoke


【解决方案1】:

没有 API 可以让您确定进程是否正在捕获(部分)屏幕。

捕获屏幕只是一系列常规 API 调用,系统不会跟踪哪些进程以允许它们捕获屏幕内容的方式使用它们。确实,它不能。捕获屏幕内容不是一个状态,而是一个事件。

您使用的功能不是安全功能。如documentation中所述:

请务必注意,与安全功能或数字版权管理 (DRM) 的实现不同,不保证使用 SetWindowDisplayAffinity [...]将严格保护窗口内容,例如有人对屏幕拍照。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-17
    • 2021-01-30
    • 1970-01-01
    • 2011-03-10
    • 2013-03-30
    • 1970-01-01
    • 2020-02-04
    • 2016-12-08
    相关资源
    最近更新 更多