I'm using action script 3.0 compiling the code to flash 10
how to get hard disk serial number with action script?
I want to get this info without any security requirement. Is there a way to do it?
I'm using action script 3.0 compiling the code to flash 10
how to get hard disk serial number with action script?
I want to get this info without any security requirement. Is there a way to do it?
C# コンソール アプリケーションからデバイスのすべての物理メディアを取得し、各物理メディアとそのプロパティを xml として出力できます。次に、API を使用する Air アプリケーションで、NativeApplication
物理メディアとそのプロパティ、つまりハードディスク ドライブのシリアル番号を取得できます。私はこれの例を作りました:
GetPhysicalMedia.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Management;
namespace GetPhysicalMedia
{
class Program
{
static void Main(string[] args)
{
ManagementClass managementClass = new ManagementClass("Win32_PhysicalMedia");
String physicalMediaXml = "";
physicalMediaXml += "<physicalMedia>\n";
foreach (ManagementObject managementObject in managementClass.GetInstances())
{
physicalMediaXml += "\t<physicalMedium ";
physicalMediaXml += "caption" + "='" + managementObject["Caption"] + "' ";
physicalMediaXml += "description" + "='" + managementObject["Description"] + "' ";
physicalMediaXml += "installDate" + "='" + managementObject["InstallDate"] + "' ";
physicalMediaXml += "name" + "='" + managementObject["Name"] + "' ";
physicalMediaXml += "status" + "='" + managementObject["Status"] + "' ";
physicalMediaXml += "creationClassName" + "='" + managementObject["CreationClassName"] + "' ";
physicalMediaXml += "manufacturer" + "='" + managementObject["Manufacturer"] + "' ";
physicalMediaXml += "model" + "='" + managementObject["Model"] + "' ";
physicalMediaXml += "sku" + "='" + managementObject["SKU"] + "' ";
physicalMediaXml += "serialNumber" + "='" + managementObject["SerialNumber"] + "' ";
physicalMediaXml += "tag" + "='" + Regex.Replace((String)managementObject["Tag"], "\\\\", "\") +"' ";
physicalMediaXml += "version" + "='" + managementObject["Version"] + "' ";
physicalMediaXml += "partNumber" + "='" + managementObject["PartNumber"] + "' ";
physicalMediaXml += "otherIdentifyingInfo" + "='" + managementObject["OtherIdentifyingInfo"] + "' ";
physicalMediaXml += "poweredOn" + "='" + managementObject["PoweredOn"] + "' ";
physicalMediaXml += "removable" + "='" + managementObject["Removable"] + "' ";
physicalMediaXml += "replaceable" + "='" + managementObject["Replaceable"] + "' ";
physicalMediaXml += "hotSwappable" + "='" + managementObject["HotSwappable"] + "' ";
physicalMediaXml += "capacity" + "='" + managementObject["Capacity"] + "' ";
physicalMediaXml += "mediaType" + "='" + managementObject["MediaType"] + "' ";
physicalMediaXml += "mediaDescription" + "='" + managementObject["MediaDescription"] + "' ";
physicalMediaXml += "writeProtectOn" + "='" + managementObject["WriteProtectOn"] + "' ";
physicalMediaXml += "cleanerMedia" + "='" + managementObject["CleanerMedia"] + "' ";
physicalMediaXml += "/>\n";
}// end foreach
physicalMediaXml += "</physicalMedia>\n";
Console.WriteLine(physicalMediaXml);
}// end method
}// end class
}// end namespace
Main.as:
package
{
import flash.desktop.NativeProcess;
import flash.desktop.NativeProcessStartupInfo;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.filesystem.File;
public class Main extends Sprite
{
private var _nativeProcess:NativeProcess;
private var _nativeProcessSUI:NativeProcessStartupInfo;
private var _physicalMedia:XML;
public function Main():void
{
_nativeProcess = new NativeProcess();
_nativeProcessSUI = new NativeProcessStartupInfo();
_nativeProcessSUI.executable = File.applicationDirectory.resolvePath("GetPhysicalMedia.exe");
_nativeProcess.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onNativeProcessSOD);
_nativeProcess.addEventListener(Event.STANDARD_OUTPUT_CLOSE, onNativeProcessSOC);
_nativeProcess.start(_nativeProcessSUI);
}// end function
private function onNativeProcessSOD(e:ProgressEvent):void
{
_physicalMedia = XML(_nativeProcess.standardOutput.readUTFBytes(_nativeProcess.standardOutput.bytesAvailable));
}// end function
private function onNativeProcessSOC(e:Event):void
{
trace(_physicalMedia.physicalMedium.(String(@tag).search("PHYSICALDRIVE0") > -1).@serialNumber); // output: V5FEVZ2W
trace(_physicalMedia.physicalMedium.(String(@tag).search("PHYSICALDRIVE1") > -1).@serialNumber); // output: WD-WCASU2856512
}// end function
}// end class
}// end package
GetPhysicalMedia.exe で得られる出力の例を次に示します。
<physicalMedia>
<physicalMedium caption="" description="" installDate="" name="" status="" creationClassName="" manufacturer="" model="" sku="" serialNumber="V5FEVZ2W " tag="\\.\PHYSICALDRIVE0" version="" partNumber="" otherIdentifyingInfo="" poweredOn="" removable="" replaceable="" hotSwappable="" capacity="" mediaType="" mediaDescription="" writeProtectOn="" cleanerMedia=""/>
<physicalMedium caption="" description="" installDate="" name="" status="" creationClassName="" manufacturer="" model="" sku="" serialNumber="WD-WCASU2856512 " tag="\\.\PHYSICALDRIVE1" version="" partNumber="" otherIdentifyingInfo="" poweredOn="" removable="" replaceable="" hotSwappable="" capacity="" mediaType="" mediaDescription="" writeProtectOn="" cleanerMedia=""/>
<physicalMedium caption="" description="" installDate="" name="" status="" creationClassName="" manufacturer="" model="" sku="" serialNumber="516256L411 " tag="\\.\CDROM0" version="" partNumber="" otherIdentifyingInfo="" poweredOn="" removable="" replaceable="" hotSwappable="" capacity="" mediaType="" mediaDescription="" writeProtectOn="" cleanerMedia=""/>
</physicalMedia>
FlashPlayer からそれを行う方法はありません。最初は手動で入力するようにユーザーに求めることができますSharedObject
。
AIR を使用すると、ネイティブ OS プロセスを fork して通信し、HDD シリアル番号を取得できます。
var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
var file:File = File.applicationDirectory.resolvePath("some_hdd_utility.exe");
nativeProcessStartupInfo.executable = file;
var processArgs:Vector.<String> = new Vector.<String>();
processArgs.push("someArgs");
nativeProcessStartupInfo.arguments = processArgs;
process = new NativeProcess();
process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onOutputData);
process.start(nativeProcessStartupInfo);
public function onOutputData(event:ProgressEvent):void
{
var stdOut:ByteArray = process.standardOutput;
var data:String = stdOut.readUTFBytes(process.standardOutput.bytesAvailable);
trace("Got: ", data);
}
お役に立てれば。