2010-09-07 3 views
1

Можно создать дубликат:
How can I prevent users from taking screenshots of my application window?Предотвращение захват экрана в Delphi

До сих пор у меня есть возможность остановить нажатие клавиши Prt Sc и в состоянии очистить буфер обмена, так что мое приложение не может быть захватом экрана.

Однако в качестве теста я попробовал использовать Corel PaintShop pro и его вариант - импортировать захват экрана, который сильно отличается от захвата экрана с помощью буфера обмена, и поскольку я подозревал, что мое приложение не остановило это.

Так я нашел следующий код на этом сайте: http://www.bitwisemag.com/copy/delphi/delphi1.html

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


Грег Hewgill - Приветствия для этого - я буду читать этот пост

, чтобы получить снимок экрана на Windows, тривиальна, например, GetWindowDC (NULL). Единственный способ, которым я могу думать, похож на этот ответ: stackoverflow.com/questions/455623/... - Ник

Ник похож на тот же пост, что Грег упомянул - однако приветствия для вашего ответа

Зачем к этой проблеме? Люди в настоящее время могут просто взять фотографию со своим телефоном и отправить ее? - Marjan Venema

Это может быть правдой Марджан, но я пытаюсь остановить программы-шпионы от регистрации кликов, если это делает вопрос понятным.

+2

, чтобы получить скриншот на Windows, тривиально, например 'GetWindowDC (NULL)'. Единственный способ, о котором я думаю, похож на этот ответ: http://stackoverflow.com/questions/455623/how-can-i-prevent-users-from-taking-screenshots-of-my-application-window/456521 # 456521 –

+1

Зачем идти в эту беду? Люди в настоящее время могут просто взять фотографию со своим телефоном и отправить ее? –

ответ

1

Единственный способ, который я могу придумать, - использовать DirectX. Когда некоторые приложения, такие как проигрыватели DVD, записывают на экран с помощью DirectX, Windows видит черный (не совсем черный, но близкий) прямоугольник, на котором отображается видео. Attemps для использования PrintScr или GetWindowDC() возвращает черный прямоугольник. Высококачественные приложения для захвата экрана, такие как Snag-It, могут использовать DirectX для правильного отображения изображения, но это будет 99% -е решение для вас, и, как говорили другие, пользователи всегда могут делать снимок в любом случае.

+0

... или подключите выход VGA/DVI к записывающему устройству. –

+0

@ Андреас - Ха! Легко сорвать, помещая контент с помощью HDCP. Нет, подождите, наверное, НЕ легко! Но так как мы уже здесь переполнены территорией, почему бы и нет? –

+0

Хорошо, что я действительно потерялся во всем этом, поскольку я упомянул, что смог предотвратить экранирование PrintScreen с экрана, захватывающего мои приложения. Нет ли способа прослушивания вызова GetWindowDC и перехвата этого? или можно скрыть дескриптор окна приложения? Мне могут понадобиться некоторые примеры кода того, что мне нужно сделать с этим, поскольку я чувствую, что это выходит за рамки моих навыков Delphi :) – TimCS

Смежные вопросы