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

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

0

5 Réponses

Aussi j'essaierais:

File.userDirectory.name

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

0
ajouté
Fonctionne pour moi sur Win 7
ajouté l'auteur Ilyssis, source
Fonctionne parfaitement bien sur Windows XP. Sera-t-il le même pour Vista, Windows 7 et iMac?
ajouté l'auteur midhunhk, source

Voici une solution qui fonctionne sous XP / Vista, mais est certainement extensible à OSX, linux, je serais toujours intéressé par une autre façon.

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;
}
0
ajouté
Peut vouloir remplacer "\\" par File.separator pour le faire fonctionner sous linux.
ajouté l'auteur Kevin, source

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

0
ajouté
J'ai aussi besoin de l'utilisateur actuel, mais je n'arrive pas à trouver cette fonction ... pouvez-vous partager la solution?
ajouté l'auteur Cosma Colanicchia, source
ajouté l'auteur merlinc, source

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é, utilisez File.separator pour diviser le répertoire multiplate-forme (juste testé sur Windows et Mac OS X).

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

De plus, faire de la fonction un getter approprié permet de relier sans autre travail.

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

<?xml version="1.0" encoding="utf-8"?>

     

0
ajouté

Ce n'est pas la plus belle 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);
}
0
ajouté