Erstmal sollte man klären was man unter Desktop versteht.
Wenn man den Desktop nach Microsoft-Art meint (das absolute Root-Window), dann hat man das Problem, welches Frank angesprochen hat.
Meint man hingegen die Fläche, auf der sich die Icons befinden (aka SysListView) kann man das Ganze relativ einfach umsetzen:
Delphi-Quellcode:
procedure TForm1.tm_Timer1Timer(Sender: TObject);
var
wnd : HWND;
Canv : TCanvas;
t : STring;
r : TRect;
begin
t:=TimeToStr(now);
wnd:=GetDesktopWindow;
wnd:=FindWindowEx(wnd, 0, 'Progman', nil);
wnd:=FindWindowEx(wnd, 0, 'SHELLDLL_DefView', nil);
wnd:=FindWindowEx(wnd, 0, 'SysListView32', nil);
Canv:=TCanvas.Create;
Canv.Handle:=GetDc(wnd);
Canv.Brush.Style:=bsClear;
r:= Rect(100,100,100+Canv.TextWidth(t),100+canv.TextHeight(t));
InvalidateRect(wnd,@r,true);
SendMessage(wnd, WM_PAINT,0,0);
Canv.TextOut(100,100, t);
Canv.Free;
end;