将GetUserName用于多个Windows版本和32/64

时间:2013-01-25 00:26:52

标签: delphi winapi

是否可以通过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;

感谢名单

1 个答案:

答案 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;