Что на самом деле обрабатывает рисунок обоев Windows?
Я пытаюсь работать над проектом, где я могу анимировать обои с окнами 7, либо с opengl/directx, либо с помощью GDI. Я посмотрел, как окна Windows окна выложены, и я понял, что все
"Progman" → "SHELLDLL_DefView" → "SysListView32"
иерархии.
Я попытался подключить SysListView32 WndProc и попытался возиться с сообщениями с помощью вложенной С# dll, чтобы я мог помешать рабочему столу рисовать обои, когда я заставил его изменить с помощью панели управления → меню "Персонализация". Ничто из этого не остановило обои от обновления, поэтому я решил, что explorer.exe фактически не обрабатывает рисование обоев.
Чтобы подтвердить это, я убил explorer.exe и установил небольшую программу С#, которая меняет обои на 10-секундный таймер на случайный. Как я и ожидал, обои постоянно менялись, что заставило меня поверить, что explorer.exe фактически не обрабатывает рисунок обоев!
К сожалению, здесь я полностью потерялся. Я понятия не имею, что еще несет ответственность за рисование обоев, и как я могу взять на себя этот чертеж, чтобы обработать чертеж. Я попытался это сделать через несколько дней, но с небольшим успехом. Я надеюсь, что кто-то здесь поможет мне в правильном направлении.
Ответы
Ответ 1
Рабочий стол (включая Bitmap на нем) фактически нарисован самой оконной системой. Так что это в основном довольно глубокий и старый. Поэтому, согласно изменениям, которые произошли с NT4, я полагаю, что картина действительно выполняется в win32k.sys. Драйвер был создан для замены win32.dll, который бы сделал все в пользовательском режиме с переключением контекста.
Это говорит, что это соответствует тому, что эриксон прокомментировал на ваш вопрос: win32k!xxxInternalPaintDesktop
- плохой парень.
Однако при этом необходимо будет получить DC рабочего стола HWND (0 afaik) и прикрепить его к вашему собственному чертежу. Не уверен, что вы можете превратить его в DirectX DC, но это зависит от вас, чтобы попробовать.
BTW. Можно переименовать и захватить внешние окна (HWND) и связанные с ними контексты устройств (DC). Однако вам может потребоваться привилегия или администратор. (проверена безопасность)
Ответ 2
Диспетчер окон рабочего стола отвечает за рисование обоев. Он реализован как служба Windows.