Delphi-Quellcode:
si.lpDesktop := pchar(newdesk);
FillChar(si, SizeOf(si), 0);
Da solltest du dir nochmal die Reihenfolge genauer anschauen. Dein FillChar überschreibt den Wert den du gerade erst in si.lpDesktop geschrieben hast.
CREATE_NEW_CONSOLE solltest du nur für Konsolenanwendungen verwenden. Notepad gehört da nicht dazu.
SetThreadDesktop(NewDesk) funktioniert übrigens nur, wenn dein Process noch kein Fenster erzeugt hat.