有什么方法可以检测屏幕截图或录音吗?

Is there any way to detect a screen capture or recording?

我正在给一个朋友做一个Winforms程序,他要实现的功能之一是隐藏文本框的内容不被记录;这意味着他希望它免受屏幕截图和屏幕录像的影响。

在这一点上,我试图解释这是徒劳的,解释说

  1. 有 LOADS 的程序可以用于 record/capture 屏幕,试图查看所有这些程序不仅过于详尽无法解释,而且毫无意义,因为任何程序员都值得他的 salt 可以组合一个个人程序,可以在不使用任何已知名称的情况下截取屏幕截图
  2. 即使您以某种方式设法阻止每个程序,一个人也可以拍下屏幕照片

为了回答拍摄屏幕的问题,他说虽然我们不能使程序完美,但我们可以让某人尽可能难以 "hack" 它。 (个人认为他是对的,但我认为我们不应该为了这么简单的解决方法而过火)

不过,他对有大量不同录音程序的问题的回答有点有趣,但我的知识不足以让他自信地回答。他认为所有程序中都必须有一些共同的动作,因为在某种程度上,它们都获取了屏幕上显示的数据的副本以供使用,理论上我们应该能够检测到该动作并做出相应的反应。

所以我的问题是:有谁知道录屏的程序有没有共同的动作,如果有共同的动作是什么?

所有屏幕捕获程序的工作原理都是相同的,因为它们与图形引擎交互以在某个时间点捕获屏幕图像,但就目前而言,屏幕时没有事件触发捕获已完成,因此无法检测何时发生捕获。

编辑:屏幕捕获程序访问屏幕的方式是调用 GetDC(NULL)。然后它使用 BitBit 函数将内容复制到位图中。调用 GetDC() 时没有触发任何事件,可能 Windows 中内置了一个方法,该方法未被 Microsoft 记录在案,并且隐藏在 Windows API 的深处,但什么也没有此时已记录在案。

有关这方面的更多信息,请查看 Windows Confidential: What You See Is What You get

在截屏的情况下,如果我们监视剪贴板并检测到前台应用程序运行,我们可以识别activity。 在截图工具的情况下,如果捕获屏幕截图,它会进入剪贴板,我们可以直接粘贴它。

防止 window 内容出现在屏幕截图中的支持方法是标记相应的 window 以便 OS 可以将其消隐。

这是使用 SetWindowDisplayAffinity API 调用完成的,在 Windows 7 中引入。传递 WDA_MONITOR 标志将允许 window 在监视器。 window 将在其他任何地方(例如捕获屏幕时)显示为没有内容。