2008-08-04 6 views

risposta

2

Ecco una soluzione che funziona in XP/Vista, ma è decisamente espandibile per OSX, linux, sarei comunque interessato in un altro modo.

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

potrebbe desiderare di sostituirle ' "\\"' con ' File.separator' per farlo funzionare su linux. – Kevin

10

Inoltre vorrei provare:

File.userDirectory.name 

Ma non hanno l'aria installato in modo non posso davvero provare questo ...

+0

Funziona perfettamente su Windows XP. Fornirà lo stesso per Vista, Windows 7 e iMac? – midhunhk

+0

Works for me on Win 7 – Ilyssis

10

Ci sono un paio di piccole pulizie che puoi fanno ...

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

Come Kevin suggerito, utilizzare File.separator a fare la scissione directory cross-platform (appena testato su Windows e Mac OS X).

Non è necessario utilizzare resolvePath("") a meno che non si stia cercando un bambino.

Inoltre, rendendo la funzione un getter adeguato consente il binding senza ulteriori interventi.

Nell'esempio di cui sopra ho messo in una classe UserUtil, ora mi può legarsi a UserUtil.currentOSUser, per esempio:

<?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

Questa soluzione non funziona quando l'utente ha un nome di accesso e un nome di directory home diversi, che è comune quando il SO viene reinstallato o migrato. Qualcuno conosce un'altra soluzione. Per favore aiuto. –

-1

aggiornerà il senso di seguito: c'è in realtà una costruito in funzione per ottenere l'utente corrente. Penso che sia in nativeApplication.

+0

Ho bisogno di ottenere anche l'utente corrente, ma non riesco a trovare quella funzione ... puoi condividere la soluzione? –

+0

Non c'è nulla di menzionato in http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/desktop/NativeApplication.html – merlinc

5

Questo non è l'approccio più bella, ma se si conosce la vostra applicazione AIR verrà eseguito solo in un ambiente Windows che funziona abbastanza bene:

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