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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |