AIR アプリが実行されているデバイスの製造元/モデルに関する情報を取得する方法を知っている人はいますか? Capabilities クラスはそれをカットしていないようです。
このソリューションは、Windows デスクトップまたはラップトップで実行されている AIR アプリに対してのみ機能する必要があり、特定のモデルまたはデバイスに固有のデータ (または少なくとも特定のメーカー)。
AIR アプリが実行されているデバイスの製造元/モデルに関する情報を取得する方法を知っている人はいますか? Capabilities クラスはそれをカットしていないようです。
このソリューションは、Windows デスクトップまたはラップトップで実行されている AIR アプリに対してのみ機能する必要があり、特定のモデルまたはデバイスに固有のデータ (または少なくとも特定のメーカー)。
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