Опираясь на фон рабочего стола в качестве замены обоев (Windows/С#)

Я пытаюсь сделать приложение, которое нужно нарисовать на рабочем столе, за значками, чтобы он заменил обои для рабочего стола. Я нашел несколько решений для этого, но большинство из них работало не очень хорошо (много мерцания). Одно решение похоже на то, что я ищу, но на самом деле я его не понимаю. Я делал в основном приложения С#, используя либо графические библиотеки более высокого уровня, либо только Windows Forms, и некоторые С++, но только на платформах, отличных от Windows.

Если кто-то может "перевести" его для меня или предоставить мне альтернативное решение, было бы очень благодарно!

Ответ 1

Я не нашел решение, которое хотел, но вот лучшие (только?) альтернативы:

  • Нарисуйте окно "SysListView32" (ProgMan → SHELLDLL_DefView → SysListView32). Это будет зарисовано за значками рабочего стола, но будет мерцать при использовании анимации. Как: Ссылка (вам нужно будет использовать interop в .NET).

  • Используйте наложения DirectDraw. Вы устанавливаете цвет рабочего стола на определенный неясный цвет, и все с этим цветом будет заменено на то, что на наложении. Это используется в примере в моем вопросе и в режиме обоев VLC. Однако это несовместимо с Aero. Как: Ссылка (я думаю, вы могли бы использовать Managed DirectX в .NET?).

Ответ 2

Вы можете найти вдохновение в коде проигрывателя VLC. там режим обоев, который делает то, что вы ищете.

Ответ 3

Да, с interop, см. этот поток.

Ответ 4

Увидел этот вопрос попутно, и я частично решил проблему (но никак не могу дать какой-нибудь полезный код), чтобы сделать классные игры, хотя может не иметь нужное приложение:

  • Установите фоновый рисунок рабочего стола в обычном режиме и сделайте снимок экрана на рабочем столе
  • Установите фоновый рисунок рабочего стола и сделайте снимок экрана рабочего стола.
  • Установите фоновый рисунок рабочего стола на белый и сделайте снимок экрана рабочего стола.
  • Объедините черно-белые версии, чтобы сделать маску и первый снимок экрана, поскольку значения пикселов наложения, которые отличаются прозрачностью.

Теперь в вашей форме выполните следующее по порядку:

  • Нарисуйте первый снимок экрана
  • Нарисуйте свою форму.
  • Нарисуйте созданный рабочий стол на рабочем столе

Это то, что я сделал для полноэкранной формы, но может быть легко адаптирован для не полностью экранных форм. По сути, вы воссоздали рабочий стол, но с возможностью сделать что-нибудь с ним, включая некоторые классные игры. Скорость вытягивания и производительность удовлетворительны для любого приложения, но интерактивность на рабочем столе является проблемой...:( Вот фотография игры в танках, используя принцип, за исключением того, что я установил белый фон и сделал все белые фоны прозрачными!

Моя игра в танках