Zunächst einmal solltest Du
Bool nicht mit
Boolean sondern mit
LongBool übersetzen, dann reicht es vollkommen aus, für das Ergebnis von
GetWindowThreadProcessId eine lokale Variable (wo und wie ist
dwPID denn deklariert?) und die delphi-typische Version ohne Pointer zu verwenden.
Ansonsten kann ich keinen Fehler entdecken, meine getestete Version sieht annähernd genauso aus und funktioniert. Vielleicht übergibst Du an
CloseProcessWindows keine ProcessID sondern ein
Handle auf den Prozess?
Überprüfen kannst Du das ganze mit einem Aufgruf der Form
CloseProcessWindows(GetCurrentProcessID);
mit dem eigenen Programm.