2008-08-04 8 views

Respuesta

2

Aquí hay una solución que funciona en XP/Vista, pero definitivamente es ampliable para 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; 
} 
+1

desea, puede sustituir ' "\\" 'con' File.separator' para que funcione en Linux. – Kevin

10

También me gustaría probar:

File.userDirectory.name 

Pero no tienen aire instalado de modo que no puedo probar esta ...

+0

Funciona perfectamente bien en Windows XP. ¿Proporcionará lo mismo para Vista, Windows 7 e iMac? – midhunhk

+0

Funciona para mí en Win 7 – Ilyssis

10

Hay un par de pequeñas limpiezas que puedas 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 Kevin sugirió, utilice File.separator para hacer la división directorio multiplataforma (solo probado en Windows y Mac OS X).

No necesita utilizar resolvePath("") a menos que esté buscando un niño.

Además, hacer de la función un getter adecuado permite el encuadernado sin más trabajo.

En el ejemplo anterior lo puse en una clase UserUtil, ahora puede unirse 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> 
+2

Esta solución no funciona cuando el usuario tiene un nombre de inicio de sesión y un nombre de directorio personal diferentes, que es común cuando se reinstala o migra el sistema operativo. ¿Alguien sabe otra solución? Por favor ayuda. –

-1

día manera más adelante: hay realmente una función integrada para obtener el usuario actual. Creo que está en nativeApplication.

+0

Necesito obtener el usuario actual también, pero no puedo encontrar esa función ... ¿puedes compartir la solución? –

+0

No se menciona nada en http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/desktop/NativeApplication.html – merlinc

5

Este no es el enfoque más bonita, pero si usted sabe que su aplicación AIR sólo se ejecuta en un entorno de Windows que funciona bastante 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); 
} 
Cuestiones relacionadas