Получить текущего вошедшего в систему пользователя ОС в Adobe Air

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

4.08.2008 16:05:29
5 ОТВЕТОВ

Есть пара небольших чисток, которые вы можете сделать ...

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>
10
7.02.2016 00:27:14
Это решение не работает, когда у пользователя другое имя пользователя и имя домашнего каталога, что часто встречается при переустановке или миграции ОС. Кто-нибудь знает другое решение. Пожалуйста помоги.
user192309 9.02.2011 23:46:46

Также я бы попробовал:

File.userDirectory.name

Но у меня не установлен Air, поэтому я не могу проверить это ...

9
4.08.2008 16:39:40
Отлично работает на Windows XP. Будет ли он одинаковым для Vista, Windows 7 и iMac?
midhunhk 14.09.2011 08:15:10
У меня работает на Win 7
Ilyssis 29.11.2014 17:36:52

Это не самый красивый подход, но если вы знаете, что ваше приложение 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);
}
5
17.02.2011 03:48:23

Вот решение, которое работает в 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;
}
1
7.02.2016 00:27:35
Может нужно заменить "\\"с , File.separatorчтобы заставить его работать на Linux.
Kevin 9.02.2011 23:44:28

Обновить позже: на самом деле есть встроенная функция для получения текущего пользователя. Я думаю, что это в родном приложении.

-1
6.01.2009 17:26:17
Мне тоже нужен текущий пользователь, но я не могу найти эту функцию ... Вы можете поделиться решением?
Cosma Colanicchia 31.07.2009 13:04:56
merlinc 30.03.2011 16:00:34