openplanning

Lấy thông tin phần cứng máy tính trong ứng dụng Java

Xem thêm các chuyên mục:

Nhóm phát triển của chúng tôi vừa ra mắt website langlearning.net học tiếng Anh, Nga, Đức, Pháp, Việt, Trung, Hàn, Nhật, ... miễn phí cho tất cả mọi người.
Là một website được viết trên công nghệ web Flutter vì vậy hỗ trợ rất tốt cho người học, kể cả những người học khó tính nhất.
Hiện tại website đang tiếp tục được cập nhập nội dung cho phong phú và đầy đủ hơn. Mong các bạn nghé thăm và ủng hộ website mới của chúng tôi.
Hãy theo dõi chúng tôi trên Fanpage để nhận được thông báo mỗi khi có bài viết mới. Facebook

1- Java API để lấy thông tin phần cứng máy tính?

Đôi khi bạn có nhu cầu sử dụng Java để lấy thông tin phần cứng máy tính, bao gồm Serial Number của bản mạch (Mainboard), serial của ổ cứng, CPU,...

Thật đáng tiếc là Java không có API nào như vậy, hoặc có thể là có nhưng nó không được phát hành miễn phí cho các lập trình viên. Tuy nhiên trên Windows bạn có thể lấy được các thông tin này bằng cách thực thi các kịch bản VB (VB Script).

2- Lấy thông tin phần cứng sử dụng file vbscript

OK, để đơn giản, bạn có thể tạo một file myscript.vbs với nội dung:
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
Trên Windows click vào file để chạy nó.
Trong đó Win32_ComputerSystemProduct là một class của Visual Basic, các thuộc tính của class này:
Các thuộc tính
string Caption
string Description
string IdentifyingNumber
string Name
string SKUNumber
string UUID
string Vendor
string Version
Bạn có thể chạy một file kịch bản đầy đủ hơn:
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
Các giá trị nhận được (Ứng với máy tính của tôi):
Các thuộc tính Giá trị (Ứng với máy tính của tôi)
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
Xem thêm về class Win32_ComputerSystemProduct tại:
Một số lớp Visual Basic khác có thể bạn quan tâm:

3- Sử dụng Java lấy thông tin phần cứng máy tính

OK, ở phần trên bạn đã biết cách sử dụng vb script để lấy ra thông tin phần cứng máy tính. Bây giờ bạn cần sử dụng Java thực thi các file vb script và nhận giá trị trả về.
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 {
           // Tạo một file tạm.
           File file = File.createTempFile("vbsfile", ".vbs");
           System.out.println("Create File: " + file.getAbsolutePath());
           System.out.println("------");
 
           // Ghi nội dung script vào file tạm.
           FileWriter fw = new FileWriter(file);
           fw.write(vbScript);
           fw.close();
 
           // Thực thi file.
           Process p = Runtime.getRuntime().exec("cscript //NoLogo " + file.getPath());
 
           // Tạo một luồng đọc dữ liệu trả về sau khi thực thi file vb script.
           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();
   }
 
}
Chạy ví dụ:

Xem thêm các chuyên mục: