Sto provando a lavorare su un progetto in cui posso animare lo sfondo di Windows 7, con opengl/directx o GDI. Ho guardato in quanto le finestre desktop di Windows sono disposti, e ho capito tuttoChe cosa effettivamente gestisce il disegno dello sfondo di Windows?
"Progman" -> "SHELLDLL_DefView" -> "SysListView32"
gerarchia. Ho provato ad agganciare il WndProc di SysListView32 e ho provato a fare scherzi con i messaggi usando una C# dll iniettata in modo da impedire al desktop di disegnare lo sfondo quando ho forzato la modifica tramite il Pannello di controllo -> Menu Personalizza. Niente di tutto ciò ha effettivamente impedito l'aggiornamento dello sfondo, quindi ho capito che explorer.exe in realtà non gestisce il disegno dello sfondo.
Per confermare questo, ho ucciso explorer.exe e ho impostato un piccolo programma C# che cambia lo sfondo su un timer da 10 secondi a uno casuale. Come mi aspettavo, lo sfondo continuava a cambiare, portandomi a credere che explorer.exe non gestisse il disegno dello sfondo!
Sfortunatamente, questo è il punto in cui sono completamente perso. Non ho idea di cos'altro è responsabile per disegnare lo sfondo e come posso prendere in carico il disegno, così posso gestire il disegno. Ho provato a google questo per alcuni giorni, con pochi progressi. Spero che qualcuno qui possa guidarmi nella giusta direzione.
['GetDesktopWindow'] (https://msdn.microsoft.com/en-us/library/ms633504) restituisce un handle per la finestra del desktop con lo sfondo. In Windows 7 questa finestra ha una procedura della finestra in modalità kernel 'win32k! XxxDesktopWndProc' (da win32k.sys), che chiama' win32k! XxxInternalPaintDesktop'. Le funzioni correlate sono 'win32k! XxxDrawWallpaper' e' win32k! XxxSetDeskWallpaper'. C'è anche la modalità utente ['PaintDesktop'] (https://msdn.microsoft.com/en-us/library/dd162758), che alla fine chiama' win32k! XxxInternalPaintDesktop'. – eryksun
@eryksun: questa dovrebbe essere una risposta. – ybungalobill
Il lettore multimediale vlc ha una funzione per mostrare un video come sfondo del desktop. Puoi controllare come lo fanno (probabilmente come descritto da @eryksun) –