Lấy thông tin phần cứng máy tính trong ứng dụng Java
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).
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ụ:
Các thư viện mã nguồn mở Java
- Hướng dẫn và ví dụ Java JSON Processing API (JSONP)
- Hướng dẫn sử dụng Scribe OAuth Java API với Google OAuth 2
- Lấy thông tin phần cứng máy tính trong ứng dụng Java
- Restfb Java API cho Facebook
- Tạo Credentials cho Google Drive API
- Hướng dẫn sử dụng Java JDOM2 phân tích tài liệu XML
- Hướng dẫn và ví dụ Java XStream
- Hướng dẫn sử dụng Java Jsoup phân tích HTML
- Lấy thông tin địa lý dựa trên địa chỉ IP sử dụng GeoIP2 Java API
- Đọc Ghi file excel trong Java sử dụng Apache POI
- Khám phá Facebook Graph API
- Java Sejda WebP ImageIO chuyển đổi các định dạng ảnh sang WEBP
- Java JAVE Chuyển đổi audio và video sang định dạng mp3
- Thao tác với tập tin và thư mục trên Google Drive sử dụng Java
Show More