我有一个图像应用程序,我想发布它,未注册的用户可以查看文件,但不能保存,直到他们注册。
我正在寻找一种方法,以防止用户使用内置截图功能,这样我就不必为图像添加水印。我如何才能做到这一点呢?
--编辑如下--
我决定在图片上加水印。我一直试图避免水印,因为图像是立体的,但我对水印现在的样子相当满意。我把一个标志放在角落,并在每个图像上进行足够的偏移,这样它就会出现在前景中。
不管人们在实践中是否同意,我的问题仍然有效。苹果的DVD播放器将视频隐藏在截图中,这并没有完全阻止用户截图,但实现了我最初的目标。
我仍然非常想知道如何做到这一点。( DVD播放器方式)
发布于 2010-11-22 07:14:11
DVD播放器可以做到这一点(用户仍然可以截取屏幕截图,但播放器窗口不会出现在其中),所以我确信有一种方法。可能将窗口的共享类型设置为NSWindowSharingNone
发布于 2018-01-30 20:38:16
基于通过DVD播放器进行的符号搜索,它很可能使用私有API CGSSetWindowCaptureExcludeShape。理查德·希尔德非常友好地对它和wrap it进行了反向工程,以便于使用。
由于是私有的,它可能会在任何时候停止工作(或者已经停止工作)。
但最终你的问题的答案是“是的,但不是以任何公开记录的方式”。来自this lengthy thread的其他一些收获包括:
发布于 2014-04-10 21:25:29
一个对用户非常不利的选项是通过更改com.apple.screencapture设置将存储屏幕截图的文件夹更改为/dev/null样式的目录。
这样做的一个很大的缺点是,如果应用程序的退出不干净,您可能会弄乱用户的设置,并且无法恢复它们。
另一种选择是跟踪在屏幕截图location中创建的文件,查看它们是否与name的模式匹配,然后删除它们。
不过,这种方法仍然很不友好。
我还调查了是否有可能终止处理屏幕截图的进程,不幸的是,处理它的进程,SystemUIServer在被终止后只是重启。
如果DVD播放器当前正在播放DVD,SystemUIServer似乎拒绝截图。虽然我不知道DVD播放检测是如何工作的,但它可能是阻止屏幕截图的线索。
链接
在人们开始大喊大叫之前的免责声明:我有一个合法的理由来解决这个问题,但不会使用com.apple.screencapture -> /dev/null方法,因为它有缺点。
https://stackoverflow.com/questions/4239685
复制相似问题