【问题标题】:WinForm C# : How to prevent Snipping tool or Snip & Sketch tool to capture screen shot of the particular child window?WinForm C#:如何防止截图工具或截图和草图工具捕获特定子窗口的屏幕截图?
【发布时间】:2020-06-16 08:18:57
【问题描述】:

我想防止使用截图工具截屏。我已经通过注册 KeyUp 事件和清除剪贴板来阻止 Print Screen。我想阻止仅为特定子表单(弹出对话框)捕获屏幕。

我尝试了 Form Deactivate 事件,但是一旦用户单击 Snipping 工具的 New Snip 功能,它就会激活我的应用程序。

编辑

我发现了一个噱头。请注意,它既不是防弹解决方案,也不是良好的用户体验,但它可能对你们中的一些人有所帮助。

步骤

  1. 选择面板,将背景颜色属性设置为灰色(或您选择的任何一种)。
  2. 确保该面板已隐藏并且是 SendToBack。
  3. 注册面板的点击事件。
  4. 注册表单停用事件。
  5. 在 Form Deactivate 上,将该面板的可见性设置为 true,将其停靠到填满屏幕并设置 BringToFront。因此,当用户切换到其他应用程序或单击应用程序外的任何位置时,灰色面板将覆盖您的实际屏幕。
  6. 当用户切换回应用程序时,让他们单击面板以重新打开(取消隐藏)您的实际屏幕。

同样,正如我所说,这是一种噱头,用户体验不好,但它可能会帮助像我这样的主要目标是防止用户截取敏感数据的人。

用户仍然可以通过在 VM 中运行您的应用程序,使用他们的手机或相机或截屏 VM 来拍照。所以我的解决方案不是万无一失的,但至少它肯定会让它变得不那么容易。

干杯!!

【问题讨论】:

  • 即使你可以,是什么阻止了任何人访问 DC 并捕获屏幕或他们下载的其他应用程序。
  • @TheGeneral 你是对的,但我们只是说它是“保护”敏感数据的要求的一部分。
  • 如果担心安全问题,最好使用组策略限制应用程序,否则您可以轮询进程列表并杀死您不喜欢的应用程序,但是您将永远追逐这个解决方案,任何孩子都可以绕过它。最后,您可能会编写某种 dll 注入单元,用于监视一些 win api 调用,尤其是与 Device context 相关的调用,但这仍然需要大量工作并且非常具有侵入性,可能会导致随机应用程序崩溃
  • 你让用户更难而不是保护数据。这样的要求简直是愚蠢的。如果您告诉我们您要保护哪些数据,也许有更好的解决方案。 Related.
  • @Sinatr 公平地说,安全总是使事情“对用户来说更难”并且从不 “愚蠢的”.

标签: c# .net winforms


【解决方案1】:

使用 pInvoke 调用SetWindowDisplayAffinity(hwnd, WDA_MONITOR);

来自Old New thing

也就是说,客户可以修改他们的专有程序以调用 SetWindowDisplayAffinity 函数来指示窗口内容不应包含在屏幕截图中,正如我前段时间所指出的那样。桌面合成器将阻止这些像素包含在 BitBlt 和其他屏幕捕获功能中。

UWP 应用程序可以将 Application­View.Is­Screen­Capture­Enabled 属性设置为 false 以从屏幕捕获功能中排除视图。

也就是说,这只会使捕获数据变得稍微困难​​一些。有办法绕过它,无论你做什么,你都无法阻止任何人拿出手机拍照,或者只是将重要的部分写到记事本上。

【讨论】:

  • 另一个应用程序可以获取 hwnd 并将关联设置为WDA_NONE
  • @Sinatr 正如我所提到的,有很多方法可以绕过它。我没有足够的知识来列出所有这些,但我相信有不止一种方法可以规避它。
猜你喜欢
  • 1970-01-01
  • 2017-10-11
  • 2012-07-02
  • 2020-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
相关资源
最近更新 更多