我需要 Air/Flex 应用程序中当前登录用户的名称。该应用程序将仅部署在 Windows 计算机上。我想我可以通过重新调整用户目录来实现这一点,但我对其他方式持开放态度。

没有正确的解决方案

其他提示

您可以进行一些小清理...

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("") 除非你正在寻找一个孩子。

此外,使该函数成为适当的 getter 允许进行绑定,而无需任何进一步的工作。

在上面的例子中我把它放入 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>

我也会尝试:

File.userDirectory.name

但我没有安装Air,所以我无法真正测试这个......

这不是最漂亮的方法,但如果您知道您的 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);
}

这是一个适用于 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;
}

稍后更新方式:实际上有一个内置函数可以获取当前用户。我认为它在nativeApplication中。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top