fox - flex outlet
Obtenga el usuario actual del sistema operativo conectado en Adobe Air (5)
Necesito el nombre del usuario registrado actualmente en mi aplicación Air / Flex. La aplicación solo se implementará en máquinas con Windows. Creo que podría lograr esto actualizando el directorio de usuarios, pero estoy abierto a otras formas.
También lo intentaría:
File.userDirectory.name
Pero no tengo Air instalado así que no puedo probar esto ...
Actualización más tarde: en realidad hay una función incorporada para obtener el usuario actual. Creo que está en nativeApplication.
Este no es el enfoque más bonito, pero si sabe que su aplicación AIR solo se ejecutará en un entorno Windows, funciona lo suficientemente 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);
}
Aquí hay una solución que funciona en XP / Vista, pero definitivamente se puede expandir a OSX, Linux, todavía estaría interesado de otra manera.
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;
}
Hay un par de pequeñas limpiezas que puedes hacer ...
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;
}
}
}
Como sugirió Kevin, use File.separator
para hacer que el directorio se File.separator
multiplataforma (recién probado en Windows y Mac OS X).
No necesita usar resolvePath("")
menos que esté buscando un hijo.
Además, hacer de la función un getter adecuado permite el enlace sin ningún trabajo adicional.
En el ejemplo anterior lo puse en una clase UserUtil
, ahora puedo vincularlo a UserUtil.currentOSUser
, por ejemplo:
<?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>