apache flex - Holen Sie sich den aktuell angemeldeten Betriebssystembenutzer in Adobe Air

original title: "apache flex - Get the current logged in OS user in Adobe Air"


Translate

I need the name of the current logged in user in my Air/Flex application. The application will only be deployed on Windows machines. I think I could attain this by regexing the User directory, but am open to other ways.



Ich benötige den Namen des aktuell angemeldeten Benutzers in meiner Air / Flex-Anwendung. Die Anwendung wird nur auf Windows-Computern bereitgestellt. Ich denke, ich könnte dies erreichen, indem ich das Benutzerverzeichnis neu formuliere, aber ...

Dies ist die Zusammenfassung nach der Übersetzung. Wenn Sie die vollständige Übersetzung anzeigen möchten, klicken Sie auf das Symbol "Übersetzen"


Alle Antworten
  • Translate

    There's a couple of small cleanups you can make...

    package
    {
        import flash.filesystem.File;
    
        public class UserUtil
        {
            public static function get currentOSUser():String
            {
                var userDir:String = File.userDirectory.nativePath;
                var userName:String = userDir.substr(userDir.lastIndexOf(File.separator) + 1);
                return userName;
            }
        }
    }
    

    As Kevin suggested, use File.separator to make the directory splitting cross-platform (just tested on Windows and Mac OS X).

    You don't need to use resolvePath("") unless you're looking for a child.

    Also, making the function a proper getter allows binding without any further work.

    In the above example I put it into a UserUtil class, now I can bind to UserUtil.currentOSUser, e.g:

    <?xml version="1.0" encoding="utf-8"?>
    <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
        <mx:Label text="{UserUtil.currentOSUser}"/> 
    </mx:WindowedApplication>
    

  • Translate

    Also I would try:

    File.userDirectory.name
    

    But I don't have Air installed so I can't really test this...


  • Translate

    This isn't the prettiest approach, but if you know your AIR app will only be run in a Windows environment it works well enough:

    public var username:String;
    
    public function getCurrentOSUser():void
    {       
       var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();  
       var file:File = new File("C:/WINDOWS/system32/whoami.exe");
       nativeProcessStartupInfo.executable = file;
    
       process = new NativeProcess();       
       process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onOutputData);
       process.start(nativeProcessStartupInfo);
    }
    
    public function onOutputData(event:ProgressEvent):void
    {           
       var output:String = process.standardOutput.readUTFBytes(process.standardOutput.bytesAvailable);
       this.username = output.split('\\')[1];
       trace("Got username: ", this.username);
    }
    

  • Translate

    Here is a solution that works in XP / Vista, but is definitely expandable to OSX, linux, I'd still be interested in another way.

    public static function GetCurrentOSUser():String{
        // XP & Vista only.
        var userDirectory:String = File.userDirectory.resolvePath("").nativePath;
        var startIndex:Number = userDirectory.lastIndexOf("\\") + 1
        var stopIndex:Number = userDirectory.length;
        var user = userDirectory.substring(startIndex, stopIndex);
    
        return user;
    }
    

  • Translate

    Update way later: there's actually a built in function to get the current user. I think it's in nativeApplication.