在Adobe Air中获取当前登录的操作系统用户

我需要Air / Flex应用程序中当前登录用户的名称。该应用程序将只部署在Windows机器上。我想我可以通过重新编制用户目录来实现这一点,但我可以通过其他方式开放。

0
额外
意见: 1

5 答案

另外我会尝试:

File.userDirectory.name

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

0
额外
在Win 7上为我工作
额外 作者 Ilyssis,
在Windows XP上工作得很好。它会提供相同的Vista,Windows 7和iMac?
额外 作者 midhunhk,

这是一个可以在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;
}
0
额外
可能希望用 File.separator 替换“\\”以使其在Linux上工作。
额外 作者 Kevin,

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

0
额外
我也需要获取当前用户,但无法找到该功能......您可以分享解决方案吗?
额外 作者 Cosma Colanicchia,

有几个小清理你可以做...

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;
        }
    }
}

正如Kevin所建议的那样,使用 File.separator 将目录拆分为跨平台(仅在Windows和Mac OS X上进行测试)。

除非你正在寻找一个孩子,否则你不需要使用 resolvePath(“”)

另外,使函数成为一个适当的getter允许绑定而不需要进一步的工作。

在上面的例子中,我把它放到一个 UserUtil 类中,现在我可以绑定到 UserUtil.currentOSUser ,例如:

<?xml version="1.0" encoding="utf-8"?>

     

0
额外

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