Potrzebuję nazwy bieżącego zalogowanego użytkownika w aplikacji Air/Flex. Aplikacja zostanie wdrożona tylko na komputerach z systemem Windows. Myślę, że mógłbym osiągnąć to przez wyrecytowanie katalogu użytkownika, ale jestem otwarty na inne sposoby.Pobierz bieżącego zalogowanego użytkownika systemu operacyjnego w Adobe Air
Odpowiedz
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;
}
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>
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óż. –
Aktualizacja sposób później: Jest rzeczywiście zbudowany w funkcji, aby uzyskać bieżącego użytkownika. Myślę, że jest w nativeApplication.
Muszę uzyskać bieżącego użytkownika, ale nie mogę znaleźć tej funkcji ... czy możesz udostępnić rozwiązanie? –
Nie ma nic wspomnianego w http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/desktop/NativeApplication.html – merlinc
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);
}
może chcieć zastąpić '„\\”' 'z File.separator', aby działał na Linuksie. – Kevin