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。

java获取计算机硬件参数的更多相关文章

  1. Java获取函数参数名称

    原理 编译之后的class文件默认是不带有参数名称信息的,使用 IDE 时,反编译jar包得到的源代码函数参数名称是 arg0,arg1......这种形式,这是因为编译 jar 包的时候没有把符号表 ...

  2. Java获取方法参数名、Spring SpEL解析

    @Test public void testParse() { //表达式解析 ExpressionParser expressionParser = new SpelExpressionParser ...

  3. Java 获取url参数

    1. 方式一:使用HttpServletRequest对象 String id = arg0.getParameter("id"); mv.addObject("id&q ...

  4. java获取request中的参数、java解析URL问号后的参数

    java获取request中的参数.java解析URL问号后的参数.有时候我们需要从request中获取参数,或者获取拼接在Url后面的参数,有时候一个一个去拿有点麻烦,一起拿出来放在一个map里面需 ...

  5. java 获取url及url参数解析

    java  获取url及url参数解析 一.url编码:URLEncoder.encode(userName); 二.url解码: URLDecoder.decode(userName);

  6. 【java】java获取JVM启动参数 System.getProperty

    java获取JVM启动参数 System.getProperty取 -D后的key即可 public class Test { public static void main(String[] arg ...

  7. java 获取request中的请求参数

    1.get 和 post请求方式 (1)request.getParameterNames(); 获取所有参数key后.遍历request.getParameter(key)获取value (2)re ...

  8. java获取https网站证书,附带调用https:webservice接口

    一.java 获取https网站证书: 1.创建一个java工程,新建InstallCert类,将以下代码复制进去 package com; import java.io.BufferedReader ...

  9. 学习SpringMVC——如何获取请求参数

    @RequestParam,你一定见过:@PathVariable,你肯定也知道:@QueryParam,你怎么会不晓得?!还有你熟悉的他(@CookieValue)!她(@ModelAndView) ...

随机推荐

  1. JDK源码阅读(五)java.io.Serializable接口

    package java.io; public interface Serializable { } (1)实现Serializable接口的类,将会被提示提供一个 serialVersionUID ...

  2. bzoj 2631: tree 动态树+常数优化

    2631: tree Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 1716  Solved: 576[Submit][Status] Descrip ...

  3. [CF Round #294 div2] D. A and B and Interesting Substrings 【Map】

    题目链接:D. A and B and Interesting Substrings 题目大意 给定26个小写字母的权值,一共26个整数(有正有负). 给定一个小写字母组成的字符串(长度10^5),求 ...

  4. CountDownLatch的使用

    CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待.主要方法public CountDownLatch(int count);publi ...

  5. Keil编译后的各文件介绍

    编译生成的文件: .plg:编译器编译结果 .hex和.bin:可执行文件 .map和.lst:链接文件 .obj:目标文件 .crf..lnp..d和.axf:调试文件 .opt:保存工程配置信息 ...

  6. DEEPIN 2014 正式版 试用体验

    7月6日深度正式发布 Deepin 2014 操作系统,该系统是基于 Ubuntu 14.04 LTS 的 Linux 发行版,并搭载了多款深度开发的软件,更符合国人使用习惯.由于Deepin 201 ...

  7. Android Wear 开发入门

    大家好,我是陆嘉杰,我是一名Android开发者.我想和大家进行一些技术交流,希望越来越多的人能和我成为好朋友. 大家都知道,智能手表是下一个开发的风口,而这方面的技术又属于前沿,所以和大家分享下An ...

  8. 用SharedPreferences保存List(Map(String, String))数据

    原因: SharedPreferences没有保存数组的方法,但是有时候为了保存一个数组而进行序列化,或者动用sqlite都是有点杀猪焉用牛刀的感觉,所以就自己动手改进一下吧. 解决方案: 采用的方式 ...

  9. mysql表分区、查看分区

    原文地址:http://blog.csdn.net/feihong247/article/details/7885199 一.       mysql分区简介 数据库分区 数据库分区是一种物理数据库设 ...

  10. SQL也能玩递归

    最近在做项目的时候遇到一个表,将省市区都放到一个表里存储,通过父ID字段来表示省市区的关系. 创建表语句 CREATE TABLE [dbo].[Table_6]( [id1] [int] NOT N ...