I've seen that with several TV-tuner cards, they display the video on the desktop background behind the icons. Very cool effect!
vis781, suggestion won't work for two reasons, one is that a handle to a window is not the same as a handle to a DC, though Graphics.FromHwnd would get that sorted - or also using GetDC/GetWindowDC, but even if the GetDesktopWindow is the root window it basically returns the same as GetDC(0) which draws over all windows and not at background at all.
If you search for internal windows/classes with Spy++ or similar tool and point to the desktop background you'll find that it is a 'Folderview' window of class 'SysListView32', this is the listview that displays the icons on the desktop, and it is a child of 'SHELLDLL_DefView' class which in turn is a child of 'Program Manager' window of class 'Progman'. Not sure if it is possible to do the same with GetDCEx specifying a clipping region the excludes all visible windows, but if so it would also not exclude desktop icons.
When creating graphics and drawing to either of these three hwnds what is drawn stays behind all windows, but still not behind the icons on desktop.
I also did a faint try with Win32 API SetWindowPos and HWND_BOTTON which does sent app furthest to the back but on top of icons, you also have to work with the WM_Activate message. (SetParent with different windows doesn't help either.) Normal windows are already childs of Desktop window (which here always returns handle 65556, perhaps insignificant info?).
For a moment I was thinking 'SysListView32' is a regular system listview that you can change the background image of with API method, but it is yet another bad idea, it's image file system based, and same as changing the wallpaper.
Attachment:
I've attached a project that draws to SysListView32, it's quite entertaining to watch desktop background drawing and paint invalidation at 100ms timer.
Included is code commented out easy to change to see the effect of
drawing to DC of GetDesktopWindow, you will then also notice that the rectangle invalidation doesn't work, and this is because of what I explained above, the DC returned is the equivalent of DC(0). Trying to then invalidate the RECT for hwnd 0 instead of hwnd 65556 works but flickers a lot at 100ms.
Another thing you should try is to change the InvalidateRECT call from True to False for bErase parameter (while drawing to SysListview32 hwnd), the funny thing you will see now is that what is drawn to background does not disappear except for that drawn over the icons, now the icons do invalidate!! I don't think this is exactly how they do it, but imagine that you draw the whole background at 25fps live video and invalidate without Erase - the result is actually the same - live video on the background behind the icons of desktop