Рисование на фоне рабочего стола в качестве замены обоев (Windows /C #)

StackOverflow https://stackoverflow.com/questions/1683791

  •  18-09-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

Я так и не нашел желаемого решения, но вот лучшее (единственное?) альтернативы:

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

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

Другие советы

Вы можете найти вдохновение в коде VLC media Player.там есть режим обоев это делает то, что вы ищете.

Да, с interop, смотрите это Нитки.

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

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

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

  1. Нарисуйте первый скриншот
  2. Нарисуйте свою форму.
  3. Нарисуйте созданное вами наложение на рабочий стол

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

Моя Игра в Танки

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top