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

Posted

技术标签:

【中文标题】在 Adob​​e Air 中获取当前登录的操作系统用户【英文标题】:Get the current logged in OS user in Adobe Air 【发布时间】:2010-09-05 07:23:45 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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】:

我也想试试:

File.userDirectory.name

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

【讨论】:

在 Windows XP 上运行良好。它会为 Vista、Windows 7 和 iMac 提供相同的功能吗? 在 Win 7 上为我工作【参考方案3】:

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

【讨论】:

【参考方案4】:

这是一个适用于 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 上工作。【参考方案5】:

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

【讨论】:

我也需要获取当前用户,但是找不到那个功能...可以分享一下解决方案吗? help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/…中没有提及

以上是关于在 Adob​​e Air 中获取当前登录的操作系统用户的主要内容,如果未能解决你的问题,请参考以下文章

使用 Adob​​e AIR 获取外部 IP

使用 Adob​​e AIR 获取任何 USB 磁盘信息

iOS 8 中的 Adob​​e AIR - 后台通知操作

将 Flex 转换为 Adob​​e Air

哪些选项可用于使用 Adob​​e AIR 在 Android 上处理文本输入?

选择大量文件时 Adob​​e Air 应用程序关闭