是否可以通过Windows 8为Windows XP使用Win API函数GetUserName
?对于32位和64位?
function getUserName: String;
var
BufSize: DWord;
Buffer: PWideChar;
begin
BufSize:= 1024;
Buffer:= AllocMem(BufSize);
try
if GetUserName(Buffer, BufSize) then
SetString(result, Buffer, BufSize)
else
RaiseLastOSError;
finally
FreeMem(Buffer);
end;
end;
感谢名单
答案 0 :(得分:4)
答案是肯定的。所有Windows版本都提供GetUserName()
。
但是,您展示的代码只会在Delphi 2009及更高版本上编译,因为您将PWideChar
传递给GetUserName()
,这仅在GetUserName()
映射到{{1}时才有效}。如果您需要在早期的Delphi版本上编译代码,请使用GetUserNameW()
而不是PChar
来匹配实际使用的PWideChar
映射:
GetUserName()
然后可以将其简化为:
function getUserName: String;
const
UNLEN = 256;
var
BufSize: DWord;
Buffer: PChar;
begin
BufSize := UNLEN + 1;
Buffer := StrAlloc(BufSize);
try
if Windows.GetUserName(Buffer, BufSize) then
SetString(Result, Buffer, BufSize-1)
else
RaiseLastOSError;
finally
StrDispose(Buffer);
end;
end;