代码之家  ›  专栏  ›  技术社区  ›  rennat

我可以阻止用户在Mac应用程序中截屏吗?

  •  6
  • rennat  · 技术社区  · 14 年前

    我有一个图像应用程序,我想释放它,在那里未注册的用户可以查看文件,但不能保存,直到他们已经注册。

    我正在寻找一种防止用户使用内置屏幕截图功能的方法,这样我就不必给图像加水印。我怎样才能做到这一点?

    --在下面编辑--

    我决定给图像加水印。我一直在努力避免水印,因为图像是立体的,但我对水印现在的外观相当满意。我把一个标志放在角落里,并在每张图片上进行足够的偏移,使它出现在前景中。

    不管人们在实践中是否同意,我的问题仍然有效。苹果的DVD播放器将视频隐藏在屏幕截图中,这并不能完全阻止用户截图,而是实现了我最初的目标。

    我还是很想知道怎么做。(DVD播放机方式)

    5 回复  |  直到 7 年前
        1
  •  3
  •   Peter Hosey    14 年前

    DVD播放器是这样做的(用户仍然可以截屏,但播放器窗口不在里面),所以我确定有办法。可能将窗口的共享类型设置为 NSWindowSharingNone ?

        2
  •  3
  •   Heath Raftery    7 年前

    基于通过DVD播放器搜索的符号,它可能使用私有API CGSSetWindowCaptureExcludeShape . 理查德·赫德对逆向工程非常友好, wrap it 便于使用。

    由于是私有的,它可能随时停止工作(或已经停止工作)。

    但最终你的问题的答案是“是的,但不是以任何公开记录的方式”。还有一些其他的收获 this lengthy thread 是:

    1. 问这个问题必然会激起许多短视的道德愤怒。
    2. 由于没有公开的方法,反向工程DVD播放器是一个有用的途径追求。
    3. 请求Apple DTS可能是找到答案的唯一可靠方法。
        3
  •  2
  •   Martijn    14 年前

    您可以尝试全屏运行应用程序,然后捕获所有按键。但是请听Siride说。

        4
  •  2
  •   JWWalker    7 年前

    一个选择是 非常用户敌意 将屏幕捕获存储到的文件夹更改为 /dev/null 通过更改 com.apple.screencapture 设置。

    这样做的一个巨大的缺点是,如果退出应用程序不干净,您可能会破坏用户设置,并且无法恢复它们。


    另一个选项是跟踪在屏幕捕获中创建的文件 location ,查看它们是否符合 name 然后取下它们。

    不过,这种方法还是很有敌意的。


    我还调查了是否有可能终止处理屏幕捕获的进程,不幸的是,处理它的进程, SystemUIServer 在被杀后重新启动。


    系统控制器 如果DVD播放机当前正在播放DVD,则似乎拒绝截屏。不过,我不知道DVD播放检测是如何工作的,但这可能是防止截屏的一个线索。


    链接


    免责声明:我有正当理由解决这个问题,但不会使用 com.apple.screencapture -> /dev/null 方法的缺点。

        5
  •  -3
  •   DarkMalloc    14 年前

    不,这是系统功能。