apache flex - Ottieni l'utente del sistema operativo attualmente registrato in Adobe Air

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


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.

Ho bisogno del nome dell'utente attualmente connesso nella mia applicazione Air / Flex. L'applicazione verrà distribuita solo su macchine Windows. Penso che potrei raggiungere questo risultato regexando la directory User, ma ...

Questo è il riepilogo dopo la traduzione, se è necessario visualizzare la traduzione completa, fare clic sull'icona "traduci"

Tutte le risposte
  • Translate

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

        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}"/> 

  • Translate

    Also I would try:


    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);
    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.