2008-08-04 16 views

Odpowiedz

2

Oto rozwiązanie, które działa w XP/Vista, ale jest zdecydowanie rozszerzalne na OSX, Linux, nadal byłbym zainteresowany innym sposobem.

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

może chcieć zastąpić '„\\”' 'z File.separator', aby działał na Linuksie. – Kevin

10

Również chciałbym spróbować:

File.userDirectory.name 

Ale nie mam zainstalowany powietrza tak naprawdę nie mogę to sprawdzić ...

+0

Działa idealnie dobrze w systemie Windows XP. Czy zapewnia to samo dla Vista, Windows 7 i iMac? – midhunhk

+0

Działa dla mnie na Win 7 – Ilyssis

10

Jest kilka małych porządki możesz zrobić ...

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

Jak sugeruje Kevin, użyj File.separator aby dzielenie katalog wieloplatformowy (właśnie testowane na Windows i Mac OS X). Nie trzeba używać resolvePath(""), chyba że szukasz dziecka

Ponadto, dzięki czemu funkcja właściwego gettera umożliwia wiązanie bez żadnych dalszych prac.

W powyższym przykładzie I umieścić go w klasie UserUtil, teraz mogę wiązać się UserUtil.currentOSUser, np:

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

To rozwiązanie nie działa, gdy użytkownik ma inną nazwę logowania i nazwę katalogu domowego, co jest powszechne, gdy system operacyjny jest reinstalowany lub migrowany. Czy ktoś zna inne rozwiązanie. Proszę pomóż. –

-1

Aktualizacja sposób później: Jest rzeczywiście zbudowany w funkcji, aby uzyskać bieżącego użytkownika. Myślę, że jest w nativeApplication.

+0

Muszę uzyskać bieżącego użytkownika, ale nie mogę znaleźć tej funkcji ... czy możesz udostępnić rozwiązanie? –

+0

Nie ma nic wspomnianego w http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/desktop/NativeApplication.html – merlinc

5

To nie jest najładniejszy podejście, ale jeśli wiesz, aplikacja AIR będzie działać tylko w środowisku Windows działa wystarczająco dobrze:

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