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

20

我需要在我的Air/Flex应用程序中获取当前登录用户的名称。该应用程序仅部署在Windows机器上。我认为可以通过正则表达式匹配用户目录来实现,但也欢迎其他方法。

5个回答

10

你可以进行一些小的清理工作...

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"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:Label text="{UserUtil.currentOSUser}"/> 
</mx:WindowedApplication>

2
当用户登录名和主目录名称不同时,此解决方案将无法正常工作,这在重新安装或迁移操作系统时很常见。是否有其他解决方案?请帮忙。 - user192309

9
我会尝试以下方法:

此外,我会尝试:

File.userDirectory.name

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


在Windows XP上完美运行。它会在Vista、Windows 7和iMac上提供相同的效果吗? - midhunhk
在我的Win 7上可以运行。 - Ilyssis

5

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

1

这里有一个在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
可以考虑使用File.separator来替换"\\",以在Linux系统上使代码正常运行。 - Kevin

-1

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


我也需要获取当前用户,但是找不到相应的函数... 你能分享一下解决方案吗? - Cosma Colanicchia
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/desktop/NativeApplication.html 中没有提到任何内容。 - merlinc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接