c# - ¿Qué maneja el dibujo de Windows Wallpaper?
opengl windows-7 (2)
Desktop Window Manager es responsable de dibujar el fondo de pantalla. Se implementa como un servicio de Windows.
Estoy intentando trabajar en un proyecto donde puedo animar el fondo de pantalla de Windows 7, ya sea con opengl / directx o GDI. Miré cómo se presentan las ventanas del escritorio de Windows, y descubrí el todo
"Progman" -> "SHELLDLL_DefView" -> "SysListView32"
jerarquía. Intenté enganchar el WndProc de SysListView32 y traté de jugar con los mensajes usando un c # dll inyectado para poder evitar que el escritorio dibujara el fondo de pantalla cuando lo forcé a cambiar usando el Panel de control -> menú Personalizar. Nada de esto realmente impidió que se actualizara el fondo de pantalla, así que pensé que explorer.exe no maneja el dibujo del fondo de pantalla.
Para confirmar esto, eliminé explorer.exe y configuré un pequeño programa c # que cambia el fondo de pantalla en un temporizador de 10 segundos a uno aleatorio. Como esperaba, el fondo de pantalla siguió cambiando, lo que me llevó a creer que explorer.exe en realidad no maneja el dibujo del fondo de pantalla.
Lamentablemente, aquí es donde estoy completamente perdido. No tengo idea de qué otra cosa es responsable de dibujar el fondo de pantalla, y cómo puedo tomar el control de su dibujo para que pueda manejar el dibujo. Intenté googlear esto por unos días, con poco progreso. Espero que alguien aquí pueda guiarme en la dirección correcta.
El escritorio (incluido el mapa de bits) es dibujado por el propio sistema de ventanas. Entonces eso es básicamente bastante profundo y viejo también. Entonces, de acuerdo con los cambios que ocurrieron desde NT4, supongo que la pintura en realidad se hace en win32k.sys. El controlador fue creado para reemplazar win32.dll que habría hecho todo en modo de usuario con el cambio de contexto.
Dicho esto, va de acuerdo con lo que erykson comentó a su pregunta: win32k!xxxInternalPaintDesktop
es el malo.
Sin embargo, debería ser posible adquirir el DC del Desktop HWND (0 afaik) y adjuntarlo a su propio dibujo. No estoy seguro de si puede convertirlo en un DirectX DC, pero esto depende de usted para intentarlo.
Por cierto. Es posible reaparecer y capturar ventanas externas (HWND) y contextos de dispositivo asociados (DC). Sin embargo, es posible que deba ser privilegiado o administrador. (seguridad comprobada)