1

有没有人知道一种方法来检索有关运行 AIR 应用程序的设备的制造商/型号的信息。Capabilities 课程似乎没有削减它。

该解决方案只需要适用于在 Windows 台式机或笔记本电脑上运行的 AIR 应用程序,它不必是模型的描述性字符串 - 只要它是特定模型或设备(或至少是特定制造商)。

4

1 回答 1

3

在 Windows 上,可以使用 WMIC 或Windows Management Instrumentation Command-line查询主板的序列号。因此,您可以使用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,例如我自己的 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 回答