2008-08-04 15 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

10

はまた、私がしようとするだろう:

File.userDirectory.name 

しかし、私は本当にこれをテストすることはできませんので、私は空気がインストールされていない...

+0

Windows XPで正常に動作します。 Vista、Windows 7、およびiMacにも同じ機能を提供しますか? – midhunhk

+0

Windows 7上で動作する – Ilyssis

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("")を使用する必要はありません。

また、この関数を適切なゲッターにすることで、これ以上の作業をせずにバインドすることができます。例えば上記の例では

私は今、私はUserUtil.currentOSUserに結合することができ、UserUtilクラスに入れて、:

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

このソリューションは、ユーザーが異なるログイン名とホームディレクトリ名を持っている場合に機能しません。これは、OSの再インストールまたは移行時によく起こります。誰か他の解決策を知っていますか?助けてください。 –

-1

アップデート方法以降:現在のユーザーを取得するための関数に建てられ、実際にあります。私はそれがnativeApplicationにあると思う。

+0

私も現在のユーザーを取得する必要がありますが、その機能を見つけることができません...ソリューションを共有できますか? –

+0

http://help.adobe.com/jp/FlashPlatform/reference/actionscript/3/flash/desktop/NativeApplication.htmlには何も記載されていません – merlinc

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); 
} 
関連する問題