devstory

Obtenir des informations sur le matériel dans l'application Java

  1. Java API pour récupérer des informations matériel informatique?
  2. Obtenir des informations matérielles en utilisant le fichier vbscript
  3. Utiliser Java pour obtenir des informations sur le matériel informatique

1. Java API pour récupérer des informations matériel informatique?

Parfois, lorsque vous avez besoin d'utiliser Java pour récupérer des informations sur le matériel informatique, vous devez utiliser Java, y compris le numéro de série de Mainboard, la série du disque dur, la CPU, ...

Malheureusement, Java n'a pas de telle API, ou peut-être là, mais il n'a pas été libéré gratuitement pour les programmeurs. Cependant, sur Windows, vous pouvez obtenir ces informations en exécutant le script VB(VB Script).

2. Obtenir des informations matérielles en utilisant le fichier vbscript

OK, pour être plus simple, vous pouvez créer un fichier nommé 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
Sur Windows cliquez sur le fichier pour l'exécuter :

Dans lequel Win32_ComputerSystemProduct est une classe de Visual Basic, les propriétés de cette classe :
Properties
string Caption
string Description
string IdentifyingNumber
string Name
string SKUNumber
string UUID
string Vendor
string Version
Vous pouvez exécuter un fichier de script plus complet :
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
Les résultats obtenues (corresponde à mon ordinateur) :
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
Voir plus de clase Win32_ComputerSystemProduct à :

Voir plus Win32_ComputerSystemProduct:

 
Voir plus Win32_ComputerSystemProduct:

 
Certaines autres classes Visual Basic, vous pouvez vous intéresser à :

3. Utiliser Java pour obtenir des informations sur le matériel informatique

OK ci-dessus, vous savez comment utiliser le vb script pour récupérer les informations matérielles de l'ordinateur. Maintenant, vous devez utiliser Java pour exécuter des fichiers de vb script et obtenir la valeur renvoyée.
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();
    }
   
}
Exécutez l'exemple :