Um das ShowMessage und Halt würde ich ein Begin-End drumrummachen.
PS: Mit Debuggen (F7), anstatt F9, wäre dieses bestimmt aufgefallen.
PS:
if (mHandle = 0) and (GetLastError = ERROR_ALREADY_EXISTS) then
,
denn GetLastError gibt den letzten Fehler und nicht den Zustand des letzten Befehls zurück.
Sowas steht übrigens im
MSDN drin ... die ersten 2 Zeilen im Abschnitt "Return Value" ... GetLastError ist da nur bei "If the function fails" erwähnt.