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

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

  •  08-06-2019
  •  | 
  •  

Question

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

Pas de solution correcte

Autres conseils

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 rendre le fractionnement des répertoires multiplateforme (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 une liaison sans autre travail.

Dans l'exemple ci-dessus, je l'ai mis dans un UserUtil classe, 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>

J'essaierais aussi :

File.userDirectory.name

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

Ce n'est pas la plus jolie approche, mais si vous savez que votre application AIR ne sera exécutée que dans un environnement Windows, elle 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);
}

Voici une solution qui fonctionne sous XP/Vista, mais qui est définitivement extensible à OSX, Linux, je serais quand même intéressé par 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;
}

Mise à 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top