Ottieni l'utente del sistema operativo correntemente connesso in Adobe Air

StackOverflow https://stackoverflow.com/questions/1376

  •  08-06-2019
  •  | 
  •  

Domanda

Ho bisogno del nome dell'utente attualmente connesso nella mia applicazione Air/Flex.L'applicazione verrà distribuita solo su macchine Windows.Penso che potrei ottenere questo risultato regexando la directory Utente, ma sono aperto ad altri modi.

Nessuna soluzione corretta

Altri suggerimenti

Ci sono un paio di piccole pulizie che puoi fare...

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;
        }
    }
}

Come suggerito da Kevin, usa File.separator per rendere multipiattaforma la suddivisione delle directory (appena testato su Windows e Mac OS X).

Non è necessario utilizzare resolvePath("") a meno che tu non stia cercando un bambino.

Inoltre, rendere la funzione un getter corretto consente l'associazione senza ulteriore lavoro.

Nell'esempio sopra l'ho inserito in a UserUtil classe, ora posso collegarmi a UserUtil.currentOSUser, per esempio:

<?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>

Inoltre proverei:

File.userDirectory.name

Ma non ho Air installato quindi non posso davvero testarlo...

Questo non è l'approccio più carino, ma se sai che la tua app AIR verrà eseguita solo in un ambiente Windows funziona abbastanza bene:

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

Ecco una soluzione che funziona in XP/Vista, ma è sicuramente espandibile a OSX, Linux, mi interesserebbe comunque un altro modo.

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;
}

Aggiorna molto più tardi:in realtà c'è una funzione integrata per ottenere l'utente corrente.Penso che sia in nativeApplication.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top