Zum Gruße,
mit dem eigentlichen Problem kann ich dir nicht helfen, jedoch solltest du statt der Repeat-Schleife unbedingt eine Wait-Funktion (zB WaitForSingleObject) benutzen. Die CPU-Auslastung sinkt dann nochmals, weil die Wait-Funktion zurückkehrt, wenn der Prozeß beendet wurde (wenn du ein Prozeßhandle übergibst).
Alternativ kannst du meine Ersatzfunktion benutzen (insofern sie deinen Ansprüchen genügt), oder dir dort besagte Benutzung der Wait-Funktionen abschauen
http://assarbad.net/stuff/shellapiex.pas
http://www.delphipraxis.net/internal...ect.php?t=6983