Java获得硬盘和主板的序列号代码详解编程语言

当你需要获得windows硬件细节时,java可能不是最好的工具。 简直无从下手,不过可以通过VBS脚本获得需要的数据,然后java调用VBS获得输出。

VBS脚本通过查询WMI来获得系统硬件信息。 我们需要Win32_BaseBoard类,更多可以参考 http://msdn2.microsoft.com/en-us/library/aa389273.aspx.

获得主板信息:

import java.io.File; 
import java.io.FileWriter; 
import java.io.BufferedReader; 
import java.io.InputStreamReader; 
 
public class MiscUtils { 
  private MiscUtils() {  } 
 
  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(); 
  } 
 
  public static void main(String[] args){ 
    String cpuId = MiscUtils.getMotherboardSN(); 
    javax.swing.JOptionPane.showConfirmDialog((java.awt.Component) 
         null, cpuId, "Motherboard serial number", 
         javax.swing.JOptionPane.DEFAULT_OPTION); 
  } 
}

获得硬盘序列号:

import java.io.File; 
import java.io.FileWriter; 
import java.io.BufferedReader; 
import java.io.InputStreamReader; 
 
public class DiskUtils { 
  private DiskUtils() {  } 
 
  public static String getSerialNumber(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(); 
  } 
 
  public static void main(String[] args){ 
    String sn = DiskUtils.getSerialNumber("C"); 
    javax.swing.JOptionPane.showConfirmDialog((java.awt.Component) 
         null, sn, "Serial Number of C:", 
         javax.swing.JOptionPane.DEFAULT_OPTION); 
  } 
}

说明: 还可以获得其他更多属性如: objDrive.AvailableSpace/DriveType/FileSystem/IsReady

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/10960.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论