1

AIR アプリが実行されているデバイスの製造元/モデルに関する情報を取得する方法を知っている人はいますか? Capabilities クラスはそれをカットしていないようです。

このソリューションは、Windows デスクトップまたはラップトップで実行されている AIR アプリに対してのみ機能する必要があり、特定のモデルまたはデバイスに固有のデータ (または少なくとも特定のメーカー)。

4

1 に答える 1

3

Windows では、WMIC またはWindows Management Instrumentation Command-lineを使用してマザーボードのシリアル番号を照会できます。したがって、 native Extension を必要とせずに、flash.desktop.NativeProcessを使用してコマンドwmic baseboard get serialnumberを引数としてcmd.exeに渡すだけで済みます。

AIR NativeProcess API が使用されているため、Extended Desktopアプリケーション プロファイルを使用し、アプリケーションをネイティブ インストーラーでパッケージ化する必要があります。

package 
{
    //Imports
    import flash.display.Sprite;
    import flash.display.StageScaleMode;
    import flash.display.StageAlign;
    import flash.desktop.NativeProcess;
    import flash.desktop.NativeProcessStartupInfo;
    import flash.events.ProgressEvent;
    import flash.filesystem.File;

    //Class
    [SWF(width = "600", height = "250", frameRate = "60", backgroundColor = "0x000000")]
    public class Main extends Sprite 
    {
        //Constants
        private static const MOTHERBOARD_SERIALNUMBER_COMMAND:String = "wmic baseboard get serialnumber";

        //Properties
        private var nativeProcess:NativeProcess;

        //Constructor
        public function Main():void 
        {
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;

            init();
        }       

        //Init
        private function init():void
        {
            if (!NativeProcess.isSupported)
            {
                throw new Error("Native Process is not supported.");
            }

            var file:File = new File("C:\\Windows\\System32\\cmd.exe");

            var args:Vector.<String> = new Vector.<String>();
            args.push("/c");
            args.push(MOTHERBOARD_SERIALNUMBER_COMMAND);

            var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
            nativeProcessStartupInfo.executable = file;         
            nativeProcessStartupInfo.arguments = args;

            nativeProcess = new NativeProcess(); 
            nativeProcess.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, outputDataEventHandler);
            nativeProcess.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, outputErrorEventHandler);
            nativeProcess.start(nativeProcessStartupInfo);
        }

        //Output Data Event Handler
        private function outputDataEventHandler(event:ProgressEvent):void 
        { 
            var output:String = nativeProcess.standardOutput.readUTFBytes(nativeProcess.standardOutput.bytesAvailable);

            nativeProcess.exit();

            trace(output);
        }

        //Output Error Event Handler
        private function outputErrorEventHandler(event:ProgressEvent):void
        {
            nativeProcess.exit();

            throw new Error(event);
        }
    }
}

[編集]

または、マザーボードの製造元、モデル番号、およびシリアル番号も取得したい場合は、文字列定数を次のように更新できます。

//Constants
private static const MOTHERBOARD_INFO:String = "wmic baseboard get product, manufacturer, serialnumber";

[編集2]

次の WMIC コマンドが、マシンの名前、ベンダー、および識別番号を返すことを知りました。それはまさにあなたが探しているものに聞こえます:

//Constants
private static const CSPRODUCT_INFO:String = "wmic csproduct get name, vendor, identifyingNumber";

ただし、私自身のような特注の PC の場合、このコマンドは何も返さないことに注意してください。まあ、まったく何もないわけではありませんが、次のような典型的なものの代わりに:

IdentifyingNumber  Name           Vendor
99L9891            Latitude D610  Dell Inc.

私のカスタムビルドはこれを返します:

IdentifyingNumber     Name                 Vendor
System Serial Number  System Product Name  System manufacturer
于 2013-07-18T03:46:24.180 に答える