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 的 Runtime 类和 Process 类来执行 Windows 脚本(VBScript),从而获取 CPU 主板和硬盘的序列号。 一、获取主板序列号 在获取主板序列号时,需要使用 Windows 的 WMI 服务(Windows ...
在Java编程语言中,获取硬盘序列号是一项常见的需求,...综上所述,Java获取硬盘序列号可以通过WMI查询或访问注册表来实现,但要注意平台兼容性和API稳定性问题。在实际开发中,根据项目需求和目标平台选择合适的方法。
linux系统java通过jni方式获取硬盘序列号。包括makefile代码可以直接编译运行,代码解释请参考我的博客文章 http://blog.csdn.net/starter110/article/details/8186788
### 知识点:使用纯Java获取硬盘序列号 #### 一、背景介绍 在IT运维及资产管理领域,获取硬盘序列号是一项基本需求。通过序列号可以唯一标识一个硬盘驱动器,这对于跟踪设备状态、维护记录以及防止非法硬件接入非常...
标题“用JAVA读取硬盘序列号”涉及到的关键技术点是Java编程语言如何获取计算机硬件信息,特别是硬盘的唯一标识——序列号。在Java中,这通常需要借助于JNI(Java Native Interface)或Java的文件I/O操作来实现,...
在Java编程环境中,读取硬盘序列号是一项常见的需求,特别是在系统管理、设备识别或软件授权等领域。硬盘序列号是每个硬盘制造商赋予的唯一标识符,它可以帮助我们区分不同的硬盘。以下是一个详细的Java实现方法,...
综上所述,通过JNI技术实现Java获取Linux硬盘序列号的流程包括编写Java接口,生成头文件,编写和编译C代码,生成共享对象文件,并最终将文件放置到指定目录。这个过程涉及到跨语言编程、操作系统底层调用和动态链接...
在Java编程语言中,获取计算机硬件信息,如主板ID(也称为系统UUID)和硬盘分区编号,是一项常见的任务,尤其在系统管理和软件授权等领域。以下将详细解释如何使用Java实现这些功能。 首先,主板ID是计算机主板上的...
总结一下,获取硬盘的序列号、型号、修订号、缓存大小以及物理参数如柱面数、磁头数和扇区数,需要利用操作系统特定的API或者第三方库,如`JDiskSerial`。在Java中,这样的操作往往涉及到JNI,因为标准库并不提供...
本程序的DLL文件是从网上获取,本人只做了一点小修改, Dll文件是用c++编写的,有需要源码的,可以联系我。 java的源码都给了。。。。 本程序是用JNI技术实现的读取硬盘序列号 public static String DiskID.Factory...
在IT领域,硬盘序列号(硬盘ID)是由硬盘制造商分配给每个硬盘的独特标识符,通常用于追踪和验证硬件的合法性。这种修改行为通常与数据隐私、安全性和合法性问题相关。 描述中提到“用于修改逻辑序列号”,这可能是...
在Java中获取硬盘序列号涉及到操作系统接口的调用,这通常通过Java的`java.io.File`类和`com.sun.management.OperatingSystemMXBean`接口来实现。 首先,我们需要引入`com.sun.management.OperatingSystemMXBean`...
标题中的“获取硬盘序列号的C程序”是指一个使用C语言编写的软件,其主要功能是读取并显示计算机硬盘的唯一序列号。这个程序已经过Visual Studio 2010(VS2010)的编译,生成了一个可执行文件(EXE),名为HDD_...
该jar工具包是通过DiskID.dll获取计算机硬盘序列号、分区卷标号、MAC地址、IP地址、计算机名称等的信息,获取内容如下: 计算机名称:201709071714 硬盘序列号:183534442995 C分区卷标号:29F513CB MAC地址:F0-A9-59-...
本程序通过java准确获取电脑的硬件信息,中间用到第三方包,也一并放在本压缩文件中,里面有两个DLL动态链接库问价,要把这两个文件放在系统盘的SYSTEM32文件夹下面,合理配置第三方包就可以运行这个程序来获得电脑...
前段时间,公司让写一个授权文件,要求软件只能在某台及其上运行,只要脱离该机器,就不能运行,因此,我参考了获取CPUID、MACID和硬盘序列号的获取信息代码,将软件和这些进行加密绑定。感觉这些还是挺有用的,大家...
前段时间摸索在Java中怎么获取系统信息包括cpu、内存、硬盘信息等,刚开始使用Java自带的包进行获取,但这样获取的内存信息不够准确并且容易出现找不到相应包等错误,所以后面使用sigar插件进行获取。下面列举出...