Значит, предыстория всего этого, следующая...
Не далее, как сегодня (точнее, уже вчера) днем на работе, у одного из наших программистов возникла проблема с задачей снятия скриншота рабочего стола вместе со всеми окошками. Скриношот-то снимался, но вот полупрозрачные (которые LAYERED) окна в нем отсутствовали. А хотелось. Ибо красивости, и все такое прочее. Я не сильно вдавался в подробности его метода снятия скриншота, и предложил ему заюзать для этих целей DirectX, интерфейс DirectDraw которого, хоть и устарел безбожно, но тем не менее, имеет доступ к видеопамяти. Для иллюстрации своего предложения, решил набросать небольшой кусок кода, который бы с помощью этого чуда сохранял скриншот вместе со всеми полупрозрачностями, и прочими причендалами в bmp-ку на диске. А т.к. я человек ленивый, то прикручивать в Delphi (основная у нас среда разработки) библиотеки DirectX не стал (да, я знаю про JEDI, но их надо скачать, и прикрутить). Надо то было, всего лишь, наглядно продемонстрировать состоятельность метода. Потому я запускаю Visual Studio C# 2008 (какой идиот решил ее русифицировать - хз, но это отдельная тема), и по быстрому накидываю в нем окошко с парой кнопок. Вопрос встал с самим DirectDraw. Нашел у сабя на винте прошлогодний DX SDK, где был Managed DirectX, чего собственно и требовалось. Поставил, набросал код, запустил. Все отлично, все работает. Скриншотики складываются в файлики. Тут бы и успокоиться. Но... я люблю использовать все новое. А этому DX SDK уже почти два года. Решил стянуть в инете последний. Стянул. Полгига, мать его... Ну да ладно. В век широкополосного интернета, полгига - не размер! И что же? А нету там уже никакого Managed DirectX!!! Ну, да, забыл я... Его ж микрософт перестала поддерживать, и ринулась развивать свою XNA. Однако, хна - это хорошо, но мне то нужен доступ к первичной поверхности экрана в видеопамяти. А в хне (буду очень рад ошибаться) я подобного удовольствия не увидел. Там все в ту же сторону, что и в последних Direct3D - задайте все параметры и буферы. и винда все сама за вас отрисует, а вас к видеопамяти и близко не подпустит. Не царское это дело, с видеоадаптером возиться... В общем, плюнул на потерянное время, и стал искать наипоследний из доступных DX SDK, где еще сохранился Managed DirectX. И вот, в процессе этих поисков, наткнулся на такое оригинальное заявление, которое опустило мое и без того не высокое мнение о Билли, и его конторе:
Desktop Capture
6/12/2007 3:49 PM
MSiddiqui
Hi,
I am writing an applicaiton to capture the contents of a desktop. I have already investigated the GDI, DirectDraw and Mirror driver approach for desktop capture. All these have limitations when it comes to videos and capturing D3D application like slide show of photo viewer in vista. Is there a way to capture D3D surfaces or access video buffer directly through some DirectX APIs to overcome these issues?
Человек, вроде как спрашивает практически о том же, что и мне нужно. А в ответ получает:
Re: Desktop Capture
jwatte
No.
In fact, part of the Vista engineering was to ensure that you cannot do screen capture of HDCP protected HD content. In the mad charge to make sure that the movie studios can charge us whenever we watch, rather than just when we buy the media, a bunch of less important considerations like being able to quickly get a work-around for a buggy graphics driver, or doing proper screen captures, were given back-seat status.
Приехали... Оказывается, Билл хочет вообще не позволять пользователям иметь возможноть делать скриншоты!!! А то, как же тогда можно будет требовать денег за показ каждой картинки....... Имхо, пора все же уходить нафиг с этих форточек... Только вот, некуда.... Нормальную замену винде пока линукс не предоставляет(((
P.S. Ссылка на то самое обсуждение.