Я экспериментировал со снимком экрана в течение нескольких дней и перепробовал много разных подходов.
Пока мне больше всего нравится метод SlimDX (DirectX для .Net), потому что он позволяет мне снимать непросто стационарные объекты, но также объекты «прозрачный» и «оверлей DX» (т. е. все , что происходит на экране).Недостатком является то, что создание единого снимка экрана занимает много времени (80-90 мс для захвата поверхности + 110 мс для преобразования Surface-> Растровое изображение + 600 мс (необязательно) для экспорта / сохранения растрового изображения = всего 800 мс-1 с)
BitBlt не захватывает «оверлейные DX» с моего дисплея. Однако его производительность выше.
PrintScreen - слишком просто;)
CopyFromScreen .. Я не помню много об этом... но у него были проблемы, как у BitBlt.
Итак, смысл в том, что если вам не нужны дополнительные функции, вы можете использовать более быстрые подходы.Теперь вопрос - я не знаю много о безопасности или лучше сказать "конфиденциальность" этих методов.Для моего исследования мне нужно защитить факт «захвата экрана» от троянов, руткитов, программ, которые, возможно, следят за моими «действиями».Это очень важное условие для меня.
Я знаю, что PrintScreen легко обнаружить, поскольку он имитирует нажатие кнопки PrintScreen.В этом случае хук («не уверен») может раскрыть мое действие захвата экрана.И BitBlt, и CopyFromScreen также не кажутся мне слишком надежными ... Все, что осталось, это SlimDX.Насколько я понимаю, он снимает скриншот с переднего (возможно, заднего) буфера видеокарты.
Так что вы, ребята, думаете о «защите конфиденциальности» этих методов?Какой из них более безопасный?
PS: Если бы я хотел иметь производительность, я бы спамил BitBlt каждые 10 мс и жил бы долго и счастливо, но для моих исследований мне нужен самый универсальный и безопасный метод, поэтому я не будуне возражаю тратить 400 мс на снимок экрана;) ура.