Ho bisogno del nome dell'utente attualmente connesso nella mia applicazione Air/Flex. L'applicazione verrà distribuita solo su macchine Windows. Penso che potrei ottenere questo riordinando la directory degli utenti, ma sono aperto ad altri modi.Ottieni l'utente del sistema operativo connesso in Adobe Air
risposta
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;
}
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>
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. –
aggiornerà il senso di seguito: c'è in realtà una costruito in funzione per ottenere l'utente corrente. Penso che sia in nativeApplication.
Ho bisogno di ottenere anche l'utente corrente, ma non riesco a trovare quella funzione ... puoi condividere la soluzione? –
Non c'è nulla di menzionato in http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/desktop/NativeApplication.html – merlinc
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);
}
potrebbe desiderare di sostituirle ' "\\"' con ' File.separator' per farlo funzionare su linux. – Kevin