Me gustaría crear un fondo de escritorio animado para Windows 7 con DirectX. Estoy usando C#, SlimDX y un par de importaciones de P/Invoke de funciones API de Windows. No soy brillante con la programación nativa de Windows, pero he tenido un poke en línea y creo que lo que tengo que hacer es:DirectX Desktop
1) Encuentre el tirador de la ventana que contiene el fondo de pantalla de dekstop, conéctelo a un dispositivo DirectX y dibujar en él.
2) Cree una nueva ventana de salida e insértela encima del fondo de escritorio, pero debajo de los iconos del escritorio.
He intentado ambos, pero ninguno parece funcionar. Si navego por la jerarquía de ventanas comenzando desde el identificador devuelto por GetDesktopWindow(), puedo ir a Escritorio -> Trabajador W -> SHELLDLL_DefView -> SysListView32. Si conecto un dispositivo DirectX a este controlador, puedo dibujar sobre todo el escritorio, pero también cubre los íconos. Si creo un formulario de Windows, establezco su padre en SHELLDLL_DefView usando SetParent() y luego uso SetWindowPos para jugar con su orden Z, parece que solo puedo hacer que vaya detrás del fondo de escritorio o delante de los íconos de escritorio.
Parece que el fondo de escritorio está en segundo plano en la vista de carpeta que contiene los iconos, y por lo tanto, lo que intento hacer no puede funcionar. La única solución sería no usar el escritorio para los iconos, o buscar alguna alternativa, p. sobrescribiendo el escritorio y luego superponiendo una ventana transparente que contiene una vista del contenido de alguna carpeta.
¿Alguien tiene alguna idea de lo que debería hacer, o incluso si lo que quiero hacer es posible? Parece que puedes dibujar en el fondo del escritorio usando el GDI (como creo que lo hace el programa wxSnow), y he visto algo similar a lo que quiero hacer con VLC Media Player en Windows XP con su modo de fondo de pantalla DirectX (curiosamente, parece que no puedo activar esta opción en mi sistema).
Gracias!
Wow, ni siquiera me había dado cuenta de que DreamScene había sido eliminado de 7. ¡Me gustó un poco la función de Vista! Aquí hay una publicación en el blog sobre cómo recuperarla http://www.mydigitallife.info/2009/01/14/how-to-install-and-enable-dreamscene-in-windows-7/ (esto, por supuesto, le permite animar su escritorio sin necesidad de escribir un programa para hacerlo, para aquellos que leen esta pregunta esperando simplemente animar su escritorio y no tener que escribir un programa para hacerlo). – Ricket
Sería mejor que hicieras tu desarrollo en C++, ya que creo que DirectX 9 era la última versión con una API de DirectX administrada. –
SlimDX (http://slimdx.org/) es un contenedor para DirectX que, a diferencia de MDX, se actualiza regularmente para admitir las últimas versiones de DirectX. Tienes razón, probablemente debería estar desarrollándome en C++, pero me gusta C# demasiado para eso. – Jonathan