dem
msdn ist zu entnehmen das du einen Thread nur auf einen anderen Desktop bringen kannst wenn noch keine Handles in diesem geöffnet wurden. Was allerdings geht ist das du mit CreateProcess einen neuen prozess startest und dabei angibst auf welchem Desktop dieser gestartet werden soll. Messages per SendMessage zwischen Desktops auszutauschen ist übrigens nicht möglich.
Im Freeware-Bereich sollte sich auch ein Programm namens Desktopswitch befinden welches die möglichkeiten von SwitchDesktop demonstriert.