【问题标题】:How can I prevent (disable) video capturing of my WPF application如何防止(禁用)我的 WPF 应用程序的视频捕获
【发布时间】:2015-03-03 01:46:52
【问题描述】:

有没有办法阻止或禁用我的 WPF 应用程序的视频捕获?可能是一些 Win32 API 调用或我的 WPF 内容的一些掩码。或者,如果不可能,是否有办法至少阻止最流行的屏幕捕获程序记录我的 WPF 应用程序中发生的事情?

【问题讨论】:

  • 这是什么应用程序...
  • 或许有一个可以关闭显示器的api...X)
  • @HighCore,它是 WPF 中的一个测试系统,在内部运行 chrome 浏览器,我不希望以任何方式暴露问题。我已经保护了连接、文本的选择、禁用了很多键(alt-tab、win 键等),接下来我要做的是禁用屏幕捕获。 :)
  • @NikolayKostov 必须有一种方法来实现您的需求。不幸的是,我不知道该怎么做,但我已经看到其他 Windows 应用程序这样做了,所以它一定是可能的;)祝你好运。

标签: wpf winapi screen-capture


【解决方案1】:

要防止应用程序捕获窗口内容,您可以使用WDA_MONITOR 关联调用SetWindowDisplayAffinity Windows API。虽然这会阻止应用程序捕获屏幕,但不会阻止用户拿出智能手机并为屏幕拍照。

该 API 可在运行 Windows 7 及更高版本的系统上使用。还需要启用Desktop Window Manager 组合。关闭 DWM 合成将撤消效果,因此您需要防止用户关闭 DWM 合成。如果您运行的是 Windows 8 及更高版本,这不是问题,因为 Desktop Window Manager is always on

【讨论】:

  • 我的代码是:NativeMethods.DwmEnableComposition(CompositionAction.DwmEcEnablecomposition); NativeMethods.SetWindowDisplayAffinity( Process.GetCurrentProcess().MainWindowHandle, DisplayAffinity.Monitor); 但 Camtasia 仍在记录我的窗口。我错过了什么吗?
  • @Nikolay:Camtasia 可能正在向您的窗口发送WM_PRINTWM_PRINTCLIENT 消息,从而绕过保护。尝试使用常规的 PrntScr 按钮,看看这是否能正常工作,然后再处理特定的工具。
  • @Nikolay:在这种情况下,您可能使用了错误的窗口句柄。 MainWindowHandle 不能工作,因为一个进程可以有任意数量的顶层窗口。我建议在您的 GUI 线程上设置 CBT Hook,并在您的 HCBT_CREATEWND 处理程序中设置关联。这有两个优点:它将为任何窗口设置关联,无论它是如何创建的,并且不会为攻击者留下机会之窗。
  • @IInspectable ,调用SetWindowDisplayAffinity 我的应用程序的顶部窗口完美运行。我可以在 PrntScr 之后看到黑屏,但正如 Nikolay 提到的,一些应用程序仍然会捕获屏幕/窗口,例如 Camtasia、Any Desk 等。我阅读了您上面提到的关于 WM_PRINT 等的评论,那么我该如何处理这些特定工​​具?
  • @amo:简而言之:你不能。这是一场军备竞赛,你所能期望的只是让攻击者更难对付。始终可以在开放系统中获取数据。如果您需要这种保护,您必须在系统上运行您的应用程序,这样可以更好地隔离应用程序(如Windows 10 in S mode)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-03
  • 1970-01-01
相关资源
最近更新 更多