Мне нужно имя текущего вошедшего в систему пользователя в моем приложении Воздух / Flex. Приложение будет развернуто только на компьютерах с Windows. Я думаю, что смогу добиться этого путем регулярного выражения каталога User, но я открыт для других способов.





Вот решение, которое работает в XP / Vista, но определенно может быть расширено до OSX, linux, меня все равно заинтересует другой способ.
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;
}
Также я бы попробовал:
File.userDirectory.name
Но у меня не установлен Air, поэтому я не могу это проверить ...
Прекрасно работает в Windows XP. Будет ли это обеспечивать то же самое для Vista, Windows 7 и iMac?
У меня работает на Win 7
Вы можете сделать пару небольших уборок ...
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;
}
}
}
Как предложил Кевин, используйте File.separator для кросс-платформенного разделения каталогов (только что протестировано в Windows и Mac OS X).
Вам не нужно использовать resolvePath(""), если вы не ищете ребенка.
Кроме того, создание функции надлежащего геттера позволяет выполнять привязку без дополнительной работы.
В приведенном выше примере я поместил его в класс UserUtil, теперь я могу привязаться к UserUtil.currentOSUser, например:
<?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>
Это решение не работает, если у пользователя другое имя для входа и имя домашнего каталога, что часто бывает при переустановке или переносе ОС. Кто-нибудь знает другое решение. Пожалуйста помоги.
Обновите способ позже: на самом деле есть встроенная функция для получения текущего пользователя. Думаю дело в родном приложении.
Мне тоже нужно получить текущего пользователя, но я не могу найти эту функцию ... вы можете поделиться решением?
В help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/… ничего не упоминается
Это не самый красивый подход, но если вы знаете, что ваше приложение AIR будет запускаться только в среде Windows, оно работает достаточно хорошо:
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);
}
Возможно, захочется заменить
"\"наFile.separator, чтобы он работал в Linux.