Как я могу узнать, сделал ли пользователь скриншот? - PullRequest
2 голосов
/ 14 января 2012

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

Заранее спасибо и извините, если это вопрос с плохим содержанием из-за моего отсутствия опыта в кодировании на c #.

Ответы [ 3 ]

2 голосов
/ 14 января 2012

Возможно, вам понадобится клавиатурный крюк .Но он скажет вам, если пользователь нажал клавишу «печать экрана», а не если кто-то программно сделает снимок экрана, используя какую-то функцию GDI.

Я сомневаюсь, что можно предотвратить все способысделать скриншот.

2 голосов
/ 14 января 2012

С помощью низкоуровневого фильтра клавиатуры можно создать системную зацепку для клавиатуры и отменить любую комбинацию клавиш на экране печати. Но если кто-то также установит вспомогательное приложение (например, Gadwin или что-то в этом роде), это станет намного сложнее, потому что вы не будете заранее знать, какое сочетание клавиш вы должны перехватить (большинство инструментов позволяют указывать свои собственные перехваты).

С другой стороны: обычно не рекомендуется изменять поведение системы. Снимки экрана представляют собой поведение системы и служат отличной цели для устранения неполадок. Если вы предотвратите это, пользователи не смогут показать вам скриншот чего-то неправильного. Но если вы должны это сделать, вы можете сделать это.


РЕДАКТИРОВАТЬ: на более глубоком уровне, вы можете установить хук API . Все приложения для создания снимков экрана используют вызовы API для получения содержимого (части) экрана. Но хуки API трудно понять правильно. Более простой способ - написать драйвер уровня пользователя. В то время как вы можете предотвратить все это, это действительно стоит всех хлопот?

1 голос
/ 14 января 2012

Общий ответ: Нет. Это невозможно обнаружить - особенно из C #. Существует множество способов сделать снимок экрана, и даже приложения, написанные на C ++ / WinAPI, могут обнаружить только некоторые из них, но не все.

Также подумайте - а что если пользователь запускает ваше приложение на виртуальной машине? Он сможет делать скриншоты на хост-машине, и вы абсолютно ничего не можете сделать, чтобы обнаружить (даже предотвратить) это.

...