如何在Firemonkey Delphi項目中獲取當前登錄的用戶名?我的目標是Windows和Mac。如何獲取當前登錄的用戶名?
我有XE2,但我想任何版本的解決方案都很好,因爲我會根據需要進行升級。
如何在Firemonkey Delphi項目中獲取當前登錄的用戶名?我的目標是Windows和Mac。如何獲取當前登錄的用戶名?
我有XE2,但我想任何版本的解決方案都很好,因爲我會根據需要進行升級。
對於Windows,您可以使用GetUserName
WinAPi函數,對於OSX,您可以使用NSUserName
和/或NSFullUserName
方法。
試試這個樣品OSX
{$APPTYPE CONSOLE}
{$R *.res}
uses
Macapi.CoreFoundation,
Macapi.Foundation,
System.SysUtils;
function NSUserName: Pointer; cdecl; external '/System/Library/Frameworks/Foundation.framework/Foundation' name _PU +'NSUserName';
function NSFullUserName: Pointer; cdecl; external '/System/Library/Frameworks/Foundation.framework/Foundation' name _PU + 'NSFullUserName';
begin
try
Writeln(Format('User Name %s',[TNSString.Wrap(NSUserName).UTF8String]));
Writeln(Format('Full User Name %s',[TNSString.Wrap(NSFullUserName).UTF8String]))
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
對於Windows
{$APPTYPE CONSOLE}
uses
Windows,
SysUtils;
function WUserName: String;
var
nSize: DWord;
begin
nSize := 1024;
SetLength(Result, nSize);
if GetUserName(PChar(Result), nSize) then
SetLength(Result, nSize-1)
else
RaiseLastOSError;
end;
begin
try
Writeln(WUserName);
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
readln;
end.
編譯成一個單元:
uses
{$IFDEF MACOS}
MacApi.CoreFoundation, MacApi.Foundation,
{$ENDIF}
{$IFDEF MSWINDOWS}
Windows,
{$ENDIF}
System.SysUtils;
{$IFDEF MACOS}
function NSUserName: Pointer; cdecl; external '/System/Library/Frameworks/Foundation.framework/Foundation' name '_NSUserName';
{$ENDIF}
function GetUserName: String;
{$IFDEF MSWINDOWS}
var
nSize: DWord;
{$ENDIF}
begin
{$IFDEF MACOS}
Result := TNSString.Wrap(NSUserName).UTF8String;
{$ENDIF}
{$IFDEF MSWINDOWS}
nSize := 1024;
SetLength(Result, nSize);
if Windows.GetUserName(PChar(Result), nSize) then
begin
SetLength(Result, nSize - 1)
end
else
begin
RaiseLastOSError;
end
{$ENDIF}
end;
另一種簡單的解決方法是通過環境來獲取計算機名稱變量使用GetEnvironmentVariable功能如下:
Result := GetEnvironmentVariable('USERNAME');
P.S.This解決方案是用於Windows和Linux,但你需要的,如果是支持它來檢查你的Delphi源代碼。
非常簡單(DXE3和Win10),謝謝。 GetEnvironmentVariable提供瞭如此多的信息。 +1。 – Johnny
看起來不像FMX.Platform提供的信息 –