2008-08-04 35 views

Trả lời

2

Đây là một giải pháp hoạt động trong XP/Vista, nhưng chắc chắn có thể mở rộng sang OSX, linux, tôi vẫn muốn được quan tâm theo cách khác.

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

thể muốn thay thế ' "\\"' với ' File.separator' để làm cho nó hoạt động trên Linux. – Kevin

10

Ngoài ra tôi sẽ cố gắng:

File.userDirectory.name 

Nhưng tôi không có Air cài đặt vì vậy tôi thực sự không thể kiểm tra điều này ...

+0

Hoạt động hoàn toàn tốt trên Windows XP. Nó sẽ cung cấp tương tự cho Vista, Windows 7 và iMac? – midhunhk

+0

Làm việc với tôi trên Win 7 – Ilyssis

10

Có một vài buổi làm vệ sinh nhỏ, bạn có thể make ...

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

Như Kevin đã đề xuất, hãy sử dụng File.separator để làm cho thư mục chia tách nền tảng (chỉ được thử nghiệm trên Windows và Mac OS X).

Bạn không cần sử dụng resolvePath("") trừ khi bạn đang tìm kiếm một đứa trẻ.

Ngoài ra, làm cho hàm trở thành đúng cho phép ràng buộc mà không cần thêm bất kỳ công việc nào.

Trong ví dụ trên tôi đặt nó vào một lớp UserUtil, bây giờ tôi có thể liên kết với UserUtil.currentOSUser, ví dụ:

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

Giải pháp này không hoạt động khi người dùng có tên đăng nhập và tên thư mục chính khác nhau, điều này phổ biến khi hệ điều hành được cài đặt lại hoặc di chuyển. Có ai biết giải pháp khác không. Hãy giúp tôi. –

-1

Cập nhật cách sau: có thực sự là một xây dựng trong chức năng để có được những người dùng hiện hành. Tôi nghĩ rằng nó trong nativeApplication.

+0

Tôi cũng cần có người dùng hiện tại nhưng không thể tìm thấy chức năng đó ... bạn có thể chia sẻ giải pháp không? –

+0

Không có gì được đề cập trong http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/desktop/NativeApplication.html – merlinc

5

Đây không phải là cách tiếp cận đẹp nhất, nhưng nếu bạn biết ứng dụng AIR của bạn sẽ chỉ được chạy trong một môi trường Windows, nó hoạt động tốt đủ:

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); 
} 
Các vấn đề liên quan