2008-08-04 118 views

回答

2

这是一个可以在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 2011-02-09 23:44:28

10

我也想尝试:

File.userDirectory.name 

但我没有安装空调,所以我真的不能测试这个...

+0

在Windows XP上工作得很好。它会提供相同的Vista,Windows 7和iMac? – midhunhk 2011-09-14 08:15:10

+0

适用于Win 7的我 – Ilyssis 2014-11-29 17:36:52

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

正如凯文建议,使用File.separator使目录分裂的跨平台(只在Windows和Mac OS X上测试过)。

除非您要找孩子,否则您不需要使用resolvePath("")

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

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

<?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

当用户具有不同的登录名和主目录名时,此解决方案不起作用,这在重新安装或迁移操作系统时很常见。有谁知道另一种解决方案。请帮忙。 – 2011-02-09 23:46:46

-1

更新方式后:里面居然是一个内置的函数来获取当前用户。我认为这是在nativeApplication中。

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); 
} 
相关问题