加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 如何获取当前登录的用户名?

发布时间:2020-12-15 10:06:23 所属栏目:大数据 来源:网络整理
导读:如何在Firemonkey Delphi项目中获取当前登录的用户名?我的目标是Windows和Mac. 我有XE2,但我想任何版本的解决方案都没问题,因为如果需要我会升级. 解决方法 对于Windows,您可以使用 GetUserName WinAPi函数,对于OSX,您可以使用NSUserName和/或NSFullUserNam
如何在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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读