java获取计算机硬件参数

public class HardWareUtils {

 /**   *   * 获取主板序列号   *   *   *   * @return   */

 public static String getMotherboardSN() {

  String result = "";

  try {

   File file = File.createTempFile("realhowto", ".vbs");

   file.deleteOnExit();

   FileWriter fw = new java.io.FileWriter(file);

   String vbs = "Set objWMIService = GetObject(\"winmgmts:\\\\.\\root\\cimv2\")\n"

     + "Set colItems = objWMIService.ExecQuery _ \n"

     + "   (\"Select * from Win32_BaseBoard\") \n"

     + "For Each objItem in colItems \n"

     + "    Wscript.Echo objItem.SerialNumber \n"

     + "    exit for  ' do the first cpu only! \n" + "Next \n";

   fw.write(vbs);

   fw.close();

   Process p = Runtime.getRuntime().exec(

   "cscript //NoLogo " + file.getPath());

   BufferedReader input = new BufferedReader(new InputStreamReader(

   p.getInputStream()));

   String line;

   while ((line = input.readLine()) != null) {

    result += line;

   }

   input.close();

  } catch (Exception e) {

   e.printStackTrace();

  }

  return result.trim();

 }

 /**   *   * 获取硬盘序列号   *   *   *   * @param drive   *   *            盘符   *   * @return   */

 public static String getHardDiskSN(String drive) {

  String result = "";

  try {

   File file = File.createTempFile("realhowto", ".vbs");

   file.deleteOnExit();

   FileWriter fw = new java.io.FileWriter(file);

   String vbs = "Set objFSO = CreateObject(\"Scripting.FileSystemObject\")\n"

     + "Set colDrives = objFSO.Drives\n"

     + "Set objDrive = colDrives.item(\""

     + drive

     + "\")\n"

     + "Wscript.Echo objDrive.SerialNumber"; // see note

   fw.write(vbs);

   fw.close();

   Process p = Runtime.getRuntime().exec(

   "cscript //NoLogo " + file.getPath());

   BufferedReader input = new BufferedReader(new InputStreamReader(

   p.getInputStream()));

   String line;

   while ((line = input.readLine()) != null) {

    result += line;

   }

   input.close();

  } catch (Exception e) {

   e.printStackTrace();

  }

  return result.trim();

 }

 /**   *   * 获取CPU序列号   *   *   *   * @return   */

 public static String getCPUSerial() {

  String result = "";

  try {

   File file = File.createTempFile("tmp", ".vbs");

   file.deleteOnExit();

   FileWriter fw = new java.io.FileWriter(file);

   String vbs = "Set objWMIService = GetObject(\"winmgmts:\\\\.\\root\\cimv2\")\n"

     + "Set colItems = objWMIService.ExecQuery _ \n"

     + "   (\"Select * from Win32_Processor\") \n"

     + "For Each objItem in colItems \n"

     + "    Wscript.Echo objItem.ProcessorId \n"

     + "    exit for  ' do the first cpu only! \n" + "Next \n";

   // + "    exit for  \r\n" + "Next";

   fw.write(vbs);

   fw.close();

   Process p = Runtime.getRuntime().exec(

   "cscript //NoLogo " + file.getPath());

   BufferedReader input = new BufferedReader(new InputStreamReader(

   p.getInputStream()));

   String line;

   while ((line = input.readLine()) != null) {

    result += line;

   }

   input.close();

   file.delete();

  } catch (Exception e) {

   e.fillInStackTrace();

  }

  if (result.trim().length() < 1 || result == null) {

   result = "无CPU_ID被读取";

  }

  return result.trim();

 }

 /**   *   * 获取MAC地址   */

 public static String getMac() {

  String result = "";

  try {

   Process process = Runtime.getRuntime().exec("ipconfig");// /all");

   InputStreamReader ir = new InputStreamReader(

   process.getInputStream());

   LineNumberReader input = new LineNumberReader(ir);

   String line;

   while ((line = input.readLine()) != null)

    if (line.indexOf("Physical Address") > 0||line.indexOf("物理地址") > 0) {

     String MACAddr = line.substring(line.indexOf("-") - 2);

     result = MACAddr;

    }

  } catch (java.io.IOException e) {

   System.err.println("IOException " + e.getMessage());

  }

  return result;

 }

 public static void main(String[] args) {

  System.out.println("CPU  SN:" + HardWareUtils.getCPUSerial());

  System.out.println("主板  SN:" + HardWareUtils.getMotherboardSN());

  System.out.println("C盘   SN:" + HardWareUtils.getHardDiskSN("c"));

  System.out.println("MAC  SN:" + HardWareUtils.getMac());

 }

}

 

注:获取MAC的方法有问题,其思路是执行ipconfig /all命令并获取输出结果中的物理地址的值,但是在win7上测试时,ipconfig /all命令的输出结果中有多个物理地址,代码中取得的是最后一个地址,其准确性有待考证。另:仅适用于windows系统,linux时需要修改代码,如linux下查看ip地址的命令是ifconfig而不是ipconfig。

posted on 2014-08-13 11:54  狂奔的呙牛  阅读(532)  评论(0编辑  收藏  举报

导航