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:
Đô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).
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).

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:
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ụ:
