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

时间:2010-11-21 19:03:51

标签: cocoa macos

我有一个图像应用程序,我想发布它,未注册的用户可以查看文件但不能保存,直到他们注册。

我正在寻找一种方法来阻止用户使用内置的屏幕截图功能,因此我不必为图像添加水印。我怎么能做到这一点?

- 编辑下方 -

我决定给图像加水印。我一直试图避免水印,因为图像是立体的,但我现在对水印的外观感到非常高兴。我在角落放了一个徽标,并在每个图像上对其进行了足够的偏移,使其显示在前景中。

人们是否在实践中同意,我的问题仍然有效。 Apple的DVD播放器在其截图中隐藏了视频,这并不能完全阻止用户截取屏幕截图,而是完成了我的原始目标。

我仍然非常想知道如何做到这一点。 (DVD播放器的方式)

5 个答案:

答案 0 :(得分:3)

DVD播放器执行此操作(用户仍然可以截取屏幕截图,但播放器窗口中没有显示),所以我确定有办法。也许将窗口的共享类型设置为NSWindowSharingNone

答案 1 :(得分:3)

基于通过DVD播放器搜索符号,它可能使用私有API CGSSetWindowCaptureExcludeShape。理查德·赫德(Richard Heard)非常友好地对其进行逆向工程,wrap it易于使用。

私有,可能随时停止工作(或已经停止工作)。

但最终你的问题的答案是"是的,但不是以任何公开记录的方式"。来自this lengthy thread的其他一些要点是:

  1. 提出这个问题不可避免地激起了很多近视的道德愤怒。
  2. 鉴于没有公共方法,逆向工程DVD播放器是一条有用的途径。
  3. 向Apple DTS提出的请求可能是找到答案的唯一可靠方法。

答案 2 :(得分:2)

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

答案 3 :(得分:2)

非常用户恶意的一个选项是通过更改/dev/null设置将屏幕捕获所存储的文件夹更改为com.apple.screencapture样式目录。

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


另一个选项是跟踪屏幕截图location中创建的文件,看它们是否与name的模式匹配,然后将其删除。

这种方法仍然非常敌对。


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


如果DVD播放机目前正在播放DVD,

SystemUIServer似乎拒绝截取屏幕截图。我不知道DVD播放检测是如何工作的,但它可能会阻止屏幕截图。


链接


人们开始咆哮之前的免责声明:我有合理的理由来解决这个问题,但由于它的缺点,我不会使用com.apple.screencapture -> /dev/null方法。

答案 4 :(得分:-3)

没有;这是一个系统功能。