Tôi cần tên của người dùng đã đăng nhập hiện tại trong ứng dụng Air/Flex của tôi. Ứng dụng này sẽ chỉ được triển khai trên các máy Windows. Tôi nghĩ rằng tôi có thể đạt được điều này bằng cách regexing thư mục người dùng, nhưng đang mở cho những cách khác.Nhận người dùng hệ điều hành đã đăng nhập hiện tại trong Adobe Air
Trả lời
Đâ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;
}
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>
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. –
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.
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? –
Không có gì được đề cập trong http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/desktop/NativeApplication.html – merlinc
Đâ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);
}
thể muốn thay thế ' "\\"' với ' File.separator' để làm cho nó hoạt động trên Linux. – Kevin