Nach der
MSDN Doku zu SetThreadDesktop funktioniert diese nur, wenn keine Handles des aktuellen Threads auf dem aktuelle Desktop bestehen. Und da die
VCL das schon beim Programmstart geht das net.
Du musst also entweder einen neuen Thread verwenden, dann aber ohne
VCL, oder du machst einen neuen Thread und startest darin die
VCL.
Soweit ich weiß, gibt es bereits Posts dazu. Einfach mal CreateDesktop oder SetThreadDesktop suchen.