我需要在我的Air/Flex应用程序中获取当前登录用户的名称。该应用程序仅部署在Windows机器上。我认为可以通过正则表达式匹配用户目录来实现,但也欢迎其他方法。
我需要在我的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;
}
}
}
如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>
此外,我会尝试:
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;
}
File.separator
来替换"\\"
,以在Linux系统上使代码正常运行。 - Kevin稍后更新:实际上有一个内置函数可以获取当前用户。我认为它在nativeApplication中。