Могу ли я запретить пользователю делать снимки экрана в приложении Mac? - PullRequest
6 голосов
/ 21 ноября 2010

У меня есть приложение для работы с изображениями, и я хочу выпустить его, чтобы незарегистрированные пользователи могли просматривать файлы, но не могут сохранить их, пока они не зарегистрировались.

Я ищу способ запретить пользователю использовать встроенную функцию скриншотов, чтобы мне не пришлось наносить водяные знаки на изображения. Как мне это сделать?

- Редактировать ниже -

Я решил сделать водяные знаки на изображениях. Я пытался избежать водяных знаков, так как изображения стереоскопические, но я довольно рад тому, как водяной знак выглядит сейчас. Я поместил логотип в угол и сместил его на каждом изображении, чтобы оно появилось на переднем плане.

Независимо от того, соглашаются люди с этим на практике или нет, мой вопрос остается в силе. DVD-плеер Apple скрывает видео на своих скриншотах, что не мешает пользователю делать скриншоты, но выполняет мою первоначальную цель.

Мне бы очень хотелось узнать, как это сделать. (DVD-плеер способ)

Ответы [ 5 ]

3 голосов
/ 30 января 2018

Основываясь на поиске символов через DVD-плеер, он, вероятно, использует закрытый API CGSSetWindowCaptureExcludeShape.Ричард Херд был достаточно любезен, чтобы перепроектировать его и обернуть его для удобства использования.

Будучи закрытым, он может перестать работать (или уже перестал работать) в любое время.

Но, в конечном счете, ответ на ваш вопрос "да, но не публично документированным способом".Вот некоторые другие выводы из этой длинной темы :

  1. Задавание этого вопроса неизбежно вызывает много близорукого морального возмущения.
  2. Учитывая, что публичного метода не существует, обратная инженерияDVD-плеер - это полезный путь.
  3. Запрос в Apple DTS может быть единственным надежным способом найти ответ.
3 голосов
/ 22 ноября 2010

DVD-плеер делает это (пользователь все еще может сделать снимок экрана, но окно проигрывателя не появляется в нем), поэтому я уверен, что есть способ.Может быть, установка типа общего доступа к окну NSWindowSharingNone?

2 голосов
/ 10 апреля 2014

Один вариант, который очень враждебен к пользователю , - это изменить папку, в которой хранятся снимки экрана, на каталог в стиле /dev/null, изменив настройку com.apple.screencapture.

Огромным недостатком этого является то, что вы можете испортить настройки пользователей и не сможете восстановить их, если выход из вашего приложения не чистый.


Другой вариант - отслеживать, какие файлы созданы на снимке экрана location, посмотреть, соответствуют ли они шаблону name, а затем удалить их.

Этот метод все еще довольно враждебен.


Я также исследовал, была ли возможность убить процесс, который обрабатывает захват экрана, к сожалению, процесс, который его обрабатывает, SystemUIServer просто перезагружается после уничтожения.


SystemUIServer, похоже, отказывается делать снимки экрана, если DVD-плеер в данный момент воспроизводит DVD. Я понятия не имею, как работает обнаружение воспроизведения DVD, но это может быть причиной предотвращения скриншотов.


Ссылки


Отказ от ответственности перед тем, как люди начнут разглагольствовать: у меня есть веская причина решить эту проблему, но я не буду использовать метод com.apple.screencapture -> /dev/null из-за его недостатков.

2 голосов
/ 21 ноября 2010

Вы можете попробовать запустить приложение в полноэкранном режиме, а затем зафиксировать все нажатия клавиш. Но, пожалуйста, послушайте Сириду.

0 голосов
/ 21 ноября 2010

Нет;это системная функция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...