Eigentlich ist doch aber deine Funktion GetCurrentUserName fehlerhaft.
Der Fehler mit Trim zu korrigieren ist dann eher unschön.
Ungestest, aber ich denke du kommst damit klar:
Delphi-Quellcode:
function GetCurrentUserName:
string;
const
cnMaxUserNameLen = 254;
var
dwUserNameLen: DWORD;
begin
dwUserNameLen := cnMaxUserNameLen - 1;
SetLength(Result, cnMaxUserNameLen);
// besser Result als Puffer verwenden
// immer den Returncode einer Windows API Funktion auswerten
if GetUserName(PChar(sUserName), dwUserNameLen)
then
SetLength(Result, dwUserNameLen-1)
// in der rückgegebenen Länge in die #0 mit enthalten
else
Result := '
';
end;