betacode

Получить информацию об оборудовании в приложении Java

  1. Java API для получения информации об оборудовании компьютера?
  2. Получить информацию аппаратных средств, используя файл vbscript
  3. Использовать Java для получения информации аппаратных средств компьютера

1. Java API для получения информации об оборудовании компьютера?

Иногда вам нужно использовать Java, чтобы получить информацию о компьютерных аппаратных средствах, в том числе Serial Number схемы (Mainboard), serial жесткого диска, CPU, ...

К сожалению, Java не имеет такого API, или может быть имеет, но он не был выпущен бесплатно для программистов . Тем не менее, на Windows, вы можете получить эту информацию, выполнением сценария VB (VB Script).

2. Получить информацию аппаратных средств, используя файл vbscript

ОК, для простоты, вы можете создавать файл с названием myscript.vbs:
myscript.vbs
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")

Set colItems = objWMIService.ExecQuery _
("Select Name,UUID,Vendor,Version from Win32_ComputerSystemProduct")

For Each objItem in colItems  

    Wscript.Echo objItem.Name
    Wscript.Echo objItem.UUID
    Wscript.Echo objItem.Vendor
    Wscript.Echo objItem.Version
    
Next
В window кликните в файл, чтобы запустить его
При этом, Win32_ComputerSystemProduct -это класс Visual Basic, свойства этого класса:
Properties
string Caption
string Description
string IdentifyingNumber
string Name
string SKUNumber
string UUID
string Vendor
string Version
Вы можете запустить полный файл сценария:
Win32_ComputerSystemProduct.vbs
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")

Set colItems = objWMIService.ExecQuery _
("Select * from Win32_ComputerSystemProduct")

For Each objItem in colItems 

    Wscript.Echo objItem.Caption
    Wscript.Echo objItem.Description
    Wscript.Echo objItem.IdentifyingNumber
    Wscript.Echo objItem.Name
    Wscript.Echo objItem.SKUNumber
    Wscript.Echo objItem.UUID
    Wscript.Echo objItem.Vendor
    Wscript.Echo objItem.Version

Next
Полученные результаты ( В соответствии с моим компьютером):
Property
Value (My Computer)
Caption
Computer System Product
Description
Computer System Product
IdentifyingNumber
3F027935U
Name
Salellite S75B
SKUNumber
null
UUID
B09366C5-F0C7-E411-98E4-008CFA8C26DF
Vendor
TOSHIBA
Version
PSPPJU-07U051
Смотреть подробнее о классе Win32_ComputerSystemProduct по ссылке:
Некоторые другие классы Visual Basic, которые могут быть вам интересны:

3. Использовать Java для получения информации аппаратных средств компьютера

Хорошо, Вы знаете, как использовать VB Script для получения информации аппаратного средства компьютера. Теперь вам нужно использовать Java, чтобы выполнить файлы VB Script и получить возвратное значение.
MyUtility.java
package org.o7planning.hardwareinfo;

public class MyUtility {

    public static String makeVbScript(String vbClassName, String[] propNames) {
        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < propNames.length; i++) {
            if (i < propNames.length - 1) {
                sb.append(propNames[i]).append(",");
            } else {
                sb.append(propNames[i]);
            }
        }
        String colNameString = sb.toString();
        sb.setLength(0);

        sb.append("Set objWMIService = GetObject(\"winmgmts:\\\\.\\root\\cimv2\")").append("\n");
        sb.append("Set colItems = objWMIService.ExecQuery _ ").append("\n");
        sb.append("(\"Select ").append(colNameString).append(" from ").append(vbClassName).append("\") ").append("\n");
        sb.append("For Each objItem in colItems ").append("\n");
        for (String propName : propNames) {
            sb.append("    Wscript.Echo objItem.").append(propName).append("\n");
        }
        sb.append("Next ").append("\n");
        return sb.toString();
    }

}
GetHardwareInfo.java
package org.o7planning.hardwareinfo;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

public class GetHardwareInfo {

    public static void printComputerSystemProductInfo() {

        String vbClassName = "Win32_ComputerSystemProduct";
        String[] propNames = new String[] { "Name", "UUID", "Vendor", "Version" };

        String vbScript = MyUtility.makeVbScript(vbClassName, propNames);

        System.out.println("----------------------------------------");
        System.out.println(vbScript);
        System.out.println("----------------------------------------");

        try {
            // Create temporary file.
            File file = File.createTempFile("vbsfile", ".vbs");
            System.out.println("Create File: " + file.getAbsolutePath());
            System.out.println("------");

            // Write script content to file.
            FileWriter fw = new FileWriter(file);
            fw.write(vbScript);
            fw.close();

            // Execute the file.
            Process p = Runtime.getRuntime().exec("cscript //NoLogo " + file.getPath());

            // Create Input stream to read data returned after execute vb script file.
            BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));

            Map<String, String> map = new HashMap<String, String>();
            String line;
            int i = 0;
            while ((line = input.readLine()) != null) {
                if (i >= propNames.length) {
                    break;
                }
                String key = propNames[i];
                map.put(key, line);
                i++;
            }
            input.close();
            //
            for (String propName : propNames) {
                System.out.println(propName + " : " + map.get(propName));
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        printComputerSystemProductInfo();
    }
   
}
Запуск примера: