Я хотел бы играть в анимацию на рабочем столе Windows, не полагаясь на сторонние продукты, такие как StarDock DeskScapes или Windows DreamScene. С какими API-интерфейсами я должен смотреть?Картина непосредственно на рабочем столе Windows
ответ
вы можете прочитать эту тему ... http://www.gamedev.net/community/forums/topic.asp?topic_id=113986
это долго, но в нем, является обсуждение записи на рабочий стол ...
надеюсь, что это помогает ...
~ Bolt
Я никогда не делал этого, но вот подход, который я бы принял.
- Внесите dll в проводник через SetWindowsHookEx.
- Возьмите ручку с помощью GetDesktopWindow.
- Подкласс рабочего стола с использованием GetWindowLongPtr & SetWindowLongPtr.
- Сделайте все свое причудливое рендеринг в новом WndProc, который вы подключили.
Следует иметь в виду, что разрыв окна «Рабочий стол», вероятно, заблокирует ваш компьютер, так как все его децидентные окна (прочитайте: каждое окно для этого пользователя), вероятно, пострадают.
Кроме того, учитывая гмбогатого истории совместимости Windows, на смотровой для манекенов, предназначенных для поглощения злоупотреблений. В частности, я бы не удивился, если GetDesktopWindow фактически не вернет окно рабочего стола, которое вы ищете. Возможно, вам придется делать рытье с помощью Spy ++ или тому подобное, в основном.
Я сделал то, что вы предложили несколько лет назад в Windows XP, и это провалилось с треском. Проблема заключалась в том, что если вы перетащили окно назад и вперед (быстро) поверх рабочего стола, оно будет перерисовываться под окном, используя сплошной серый фон, а затем через секунду он будет перерисовываться с использованием обоев рабочего стола. У вас будет очень заметное «разрывание». StarDock DeskScapes утверждает, что работает в Windows XP, поэтому мне интересно, как они это сделали. Есть ли более эффективная программа, чем Spy ++ для такого рода работ? – Gili
Tearing - это артефакт вашей реализации WndProc. Рассмотрим двойную буферизацию и методы ускорения фактического BitBlt() на экране. Vista (+) с включенной композицией может значительно повлиять на убийство в этом сценарии. –
Я думаю, что этот случай отличается. Когда вы перетаскиваете окно поверх рабочего стола, он сначала перерисовывает его, используя сплошной цвет, затем он рисует обои поверх него. Я попытался подавить 1-ю краску (сплошной цвет), но, похоже, она жестко закодирована в рабочий процесс, а значит и разрывает. – Gili
Очень интересная тема. По иронии судьбы, в первый раз, когда я попытался реализовать это, также было около 2002 года. Маленький мир :) Я снова и снова рассматривал проблему, но я никогда не понял ее. У вас есть образец исходного кода, с которым я мог бы работать? Похоже, что ссылки в дискуссии были нарушены после всех этих лет. – Gili
К сожалению, я заметил, что ссылка была сломана. У меня совсем нет исходного кода ... Надеюсь, что по крайней мере некоторые из моих разговоров стимулируют ваше мышление. Вы могли бы отправить сообщение в поток и оживить его. – Boltimuss
Не волнуйтесь, я нашел его в http: //www.gameprog.it/pub/lang/ccpp/tuts/AndreasJonsson/- У него есть некоторые причуды, но он идет дальше, чем все, что я когда-либо делал. Большое спасибо Болту, вы решили проблему, которая беспокоит меня в течение очень долгого времени! – Gili