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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
19
0
6 606
5

Ответы 5

Вот решение, которое работает в 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.separator, чтобы он работал в Linux.

Kevin 10.02.2011 02:44

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

File.userDirectory.name

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

Прекрасно работает в Windows XP. Будет ли это обеспечивать то же самое для Vista, Windows 7 и iMac?

midhunhk 14.09.2011 12:15

У меня работает на Win 7

Ilyssis 29.11.2014 20:36

Вы можете сделать пару небольших уборок ...

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>

Это решение не работает, если у пользователя другое имя для входа и имя домашнего каталога, что часто бывает при переустановке или переносе ОС. Кто-нибудь знает другое решение. Пожалуйста помоги.

user192309 10.02.2011 02:46

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

Мне тоже нужно получить текущего пользователя, но я не могу найти эту функцию ... вы можете поделиться решением?

Cosma Colanicchia 31.07.2009 17:04

В help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/‌… ничего не упоминается

merlinc 30.03.2011 20:00

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

Другие вопросы по теме