WinForm C#: как запретить инструментам Snipping или Snip & Sketch делать снимки экрана конкретного дочернего окна? - PullRequest
0 голосов
/ 16 июня 2020

Я хотел бы предотвратить захват экрана с помощью ножниц. Я уже предотвратил Print Screen, зарегистрировав событие KeyUp и очистив буфер обмена. Я хотел бы предотвратить захват экрана только для определенной дочерней формы (всплывающего диалогового окна).

Я пробовал событие Form Deactivate, но как только пользователь щелкает функцию New Snip в инструменте Snipping, оно активирует мое приложение.

Edit

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

Шаги

  1. Возьмите панель, установите свойство цвета фона на серый (или любой другой по вашему выбору).
  2. Убедитесь, что панель скрыто, и это SendToBack.
  3. Регистрация события щелчка панели.
  4. Регистрация события деактивации формы.
  5. При деактивации формы установите для видимости этой панели значение true, закрепите ее на весь экран и установите BringToFront. Поэтому, когда пользователь переключается на другое приложение или щелкает в любом месте за пределами приложения, неактивная панель будет закрывать ваш фактический экран.
  6. Когда пользователь переключается обратно в приложение, заставьте его щелкнуть панель, чтобы снова открыть (показать) ваш фактический экран.

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

Пользователь по-прежнему может делать снимки с телефона или камеры или делать снимки экрана виртуальной машины, запустив ваше приложение на виртуальной машине. Так что мое решение не является пуленепробиваемым, но, по крайней мере, оно определенно сделает его не таким простым.

Ура !!

1 Ответ

1 голос
/ 16 июня 2020

Используйте pInvoke для вызова SetWindowDisplayAffinity(hwnd, WDA_MONITOR);

From Old New thing

Тем не менее, клиент может изменить свою проприетарную программу для вызова функции SetWindowDisplayAffinity чтобы указать, что содержимое окна не должно быть включено в снимки экрана, как я заметил однажды go. Компоновщик рабочего стола предотвратит включение этих пикселей в BitBlt и другие функции захвата экрана.

Приложения UWP могут установить для свойства ApplicationView.IsScreenCaptureEnabled значение false, чтобы исключить представление из функций захвата экрана.

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

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