【问题标题】:how to get hard disk serial number with action script如何使用操作脚本获取硬盘序列号
【发布时间】:2011-10-20 07:13:57
【问题描述】:

我正在使用动作脚本 3.0 将代码编译到 flash 10

如何通过动作脚本获取硬盘序列号?

我想在没有任何安全要求的情况下获取此信息。有办法吗?

【问题讨论】:

  • 我认为 AS3 对于这种东西来说太高级了......
  • 使用 ActionScript + AIR 并访问一些本机功能,这将是可能的...否则我不知道如何...您尝试了什么?你有没有收到任何错误消息?
  • @okami 我认为您无法从网络浏览器中获取硬盘序列号。从功能的角度来看,这个想法听起来很邪恶,从实现的角度来看,没有任何网络技术可以访问这些数据。
  • @okami 获取硬盘序列号的目的是什么。

标签: flash actionscript-3 hard-drive serial-number


【解决方案1】:

您可以从 C# 控制台应用程序获取设备的所有物理媒体,并将每个物理媒体及其属性输出为 xml。然后在使用NativeApplication API 的 Air 应用程序中,您可以获得所述物理介质及其属性,即硬盘驱动器的序列号。我举了一个例子:

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"], "\\\\", "&#92;") +"' ";
                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>

【讨论】:

    【解决方案2】:

    FlashPlayer 无法做到这一点。您可能会在第一次要求用户手动输入时,使用 SharedObject 并不再询问。

    使用 AIR,您可以 fork 本地操作系统进程并与其通信以获得硬盘序列号:

    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);  
    }
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-10
      • 2010-11-24
      • 2014-12-31
      • 2011-05-04
      • 2010-12-06
      • 2016-06-10
      • 2019-03-27
      • 2014-01-11
      相关资源
      最近更新 更多