答えはイエスです。 GetUserName()
すべての Windows バージョンで使用できます。
ただし、示したコードはDelphi 2009 以降でのみコンパイルPWideChar
さGetUserName()
れます。以前のバージョンの Delphi でコンパイルするコードが必要な場合は、代わりに, を使用して、実際に使用しているマッピングに一致させます。たとえば、次のようになります。SetString()
GetUserName()
GetUserNameW()
String
UnicodeString
PChar
PWideChar
GetUserName()
String
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;
これは次のように簡略化できます。
function getUserName: String;
const
UNLEN = 256;
var
BufSize: DWord;
Buffer: array[0..UNLEN] of Char;
begin
BufSize := Length(Buffer);
if Windows.GetUserName(Buffer, BufSize) then
SetString(Result, Buffer, BufSize-1)
else
RaiseLastOSError;
end;
またはこれ:
function getUserName: String;
const
UNLEN = 256;
var
BufSize: DWord;
begin
BufSize := UNLEN + 1;
SetLength(Result, BufSize);
if Windows.GetUserName(PChar(Result), BufSize) then
SetLength(Result, BufSize-1)
else
RaiseLastOSError;
end;