apache flex - Obtenir l'utilisateur du système d'exploitation actuellement connecté dans Adobe Air

Translate

J'ai besoin du nom de l'utilisateur actuellement connecté dans mon application Air / Flex. L'application ne sera déployée que sur les machines Windows. Je pense que je pourrais y parvenir en regexing le répertoire User, mais je suis ouvert à d'autres moyens.

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

Il y a quelques petits nettoyages que vous pouvez faire ...

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

Comme Kevin l'a suggéré, utilisezFile.separatorpour rendre le fractionnement de répertoire multi-plateforme (juste testé sur Windows et Mac OS X).

Vous n'avez pas besoin d'utiliserresolvePath("")sauf si vous cherchez un enfant.

De plus, faire de la fonction un getter approprié permet la liaison sans aucun travail supplémentaire.

Dans l'exemple ci-dessus, je l'ai mis dans unUserUtilclasse, maintenant je peux me lier àUserUtil.currentOSUser, par exemple:

<?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>
La source
Translate

J'essaierais aussi:

File.userDirectory.name

Mais je n'ai pas Air installé donc je ne peux pas vraiment tester ça ...

La source
Translate

Ce n'est pas la meilleure approche, mais si vous savez que votre application AIR ne sera exécutée que dans un environnement Windows, cela fonctionne assez bien:

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);
}
La source
Translate

Voici une solution qui fonctionne sous XP / Vista, mais qui est définitivement extensible à OSX, Linux, je serais toujours intéressé d'une autre manière.

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;
}
La source
Translate

Mettre à jour bien plus tard: il existe en fait une fonction intégrée pour obtenir l'utilisateur actuel. Je pense que c'est dans nativeApplication.

La source