When you need to know hardware details, Java is not the best tool unless you call a JNI routine or an external utility. The JNI solution is always the best because it is designed to interact closely with Java but it may be more complex to develop. If your need is simple (no interaction) and the need to be cross plateform is not present then calling an external utility is maybe "a good enough" choice. 如上所述,要想获取硬件信息,java不是最好的方式。。。 In these 2 examples, we create the appropriate VBS script file on-the-fly and capture its output. They are very Windows oriented since they rely on the "Windows Script Host" to execute the generated scripts. The vbscript queries a WMI class to get a specific hardware information. Here we are using the Win32_BaseBoard but they are many others, see http://msdn2.microsoft.com/en-us/library/aa389273.aspx for complete list. Motherboard serial number //通过vbscript的方式获取主板序列号 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); } } Hard disk serial number //获取硬盘序列号 This serial number is created by the OS where formatting the drive and it's not the manufacturer serial number. It's unique, because it is created on the fly based on the current time information. AFAIK, there is no API that return that the manufacturer SN. At best, the SN of the HD firmware can be read but this will involve some very low-level API calls. Keep in mind that even if you get that number, there is no warranty that it will be unique since each manufacturer can assign the SN as they wish. 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); } }
import java.io.BufferedReader; import java.io.File; import java.io.FileWriter; import java.io.InputStreamReader; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException; public class UserInfoUtil { /** * 获取IP */ public static String getIp() { String ip = ""; try { InetAddress in = InetAddress.getLocalHost(); ip = in.getHostAddress(); } catch (UnknownHostException e) { e.printStackTrace(); } return ip; } /** * 获取mac地址 */ public static String getMacAddr() { String macAddr = ""; InetAddress addr; try { addr = InetAddress.getLocalHost(); NetworkInterface dir = NetworkInterface.getByInetAddress(addr); byte[] dirMac = dir.getHardwareAddress(); int count = 0; for (int b : dirMac) { if (b < 0) b = 256 + b; if (b == 0) { macAddr = macAddr.concat("00"); } if (b > 0) { int a = b / 16; if (a == 10) macAddr = macAddr.concat("A"); else if (a == 11) macAddr = macAddr.concat("B"); else if (a == 12) macAddr = macAddr.concat("C"); else if (a == 13) macAddr = macAddr.concat("D"); else if (a == 14) macAddr = macAddr.concat("E"); else if (a == 15) macAddr = macAddr.concat("F"); else macAddr = macAddr.concat(String.valueOf(a)); a = (b % 16); if (a == 10) macAddr = macAddr.concat("A"); else if (a == 11) macAddr = macAddr.concat("B"); else if (a == 12) macAddr = macAddr.concat("C"); else if (a == 13) macAddr = macAddr.concat("D"); else if (a == 14) macAddr = macAddr.concat("E"); else if (a == 15) macAddr = macAddr.concat("F"); else macAddr = macAddr.concat(String.valueOf(a)); } if (count < dirMac.length - 1) macAddr = macAddr.concat("-"); count++; } } catch (UnknownHostException e) { macAddr = e.getMessage(); } catch (SocketException e) { macAddr = e.getMessage(); } return macAddr; } /** * 获取主板序列号 */ 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(); } }
相关推荐
通过Java代码获取PC机的CPU、主板、硬盘序列号
Java获取CPU主板硬盘序列号.doc
通过java调用,直接访问硬盘序列号,硬盘序列号获取工具by java
linux系统java通过jni方式获取硬盘序列号。包括makefile代码可以直接编译运行,代码解释请参考我的博客文章 http://blog.csdn.net/starter110/article/details/8186788
JAVA读取硬盘序列号 java 源码 yulin_xp
自己写的简短代码,依靠jna实现,没有jni的复杂,能读到包括硬盘序列号等硬盘信息,不过要根据硬盘品牌加工处理才有最终的硬盘序列号。
java读取硬盘序列号,包括jar包。和例子。
JAVA中获取硬盘序列号源码JAVA中获取硬盘序列号源码JAVA中获取硬盘序列号源码
本程序的DLL文件是从网上获取,本人只做了一点小修改, Dll文件是用c++编写的,有需要源码的,可以联系我。 java的源码都给了。。。。 本程序是用JNI技术实现的读取硬盘序列号 public static String DiskID.Factory...
java 通过jni技术实现获取linux的硬盘序列号.pdf,如果文档看不明白可以联系本人
做了软件,有的时候又怕别人copy ,写一个获取电脑硬盘序列号的一个小程序,只获取电脑的硬盘序列号,MAC地址可以换,但是电脑的硬盘应该不会老换吧 呵呵 拿上来分享,大家看看 有没有什么更好的办法,一起研究研究...
得到机器的MAC,硬盘序列序列号和IP地址 public static void main(String[] args) ...{ String osName = System.getProperty("os.name"); StringBuffer systemPathBuff = new StringBuffer(""); if (osName.index...
总结两种方法,java获取硬盘序列号的两种方法
java获取硬盘序列号,CPU.zip java获取硬盘序列号,CPU.zip
java调用dll获取硬盘序列号.rar
JSP利用JNI获取硬盘序列号等信息
java做的获取电脑的主板ID和硬盘分区编号。