JAVA 通过 JACOB 调用 WMI
1 import com.jacob.activeX.ActiveXComponent;
2 import com.jacob.com.Dispatch;
3 import com.jacob.com.EnumVariant;
4 import com.jacob.com.Variant;
5
6 public class TestWMI {
7
8 public static void main(String[] args) {
9
10 Variant wmiNoParam = getWMI("SELECT * FROM Win32_Service WHERE started = 1");
11 printProperty(wmiNoParam,"Name","ProcessId");
12 Variant wmiWithParam = getWMI("SELECT * FROM Win32_SerialPort","WQL", 0x10|0x20);
13 printProperty(wmiWithParam,"DeviceID");
14 }
15
16 private static void printProperty(Variant vCollection, String... properties) {
17 EnumVariant enumVariant = new EnumVariant(vCollection.toDispatch());
18
19 while (enumVariant.hasMoreElements()) {
20 Dispatch item = enumVariant.nextElement().toDispatch();
21 for (String property : properties) {
22 Variant variant = Dispatch.call(item, property);
23 System.out.println(variant);
24 }
25 }
26 }
27
28 public static Variant getWMI(String query, Object... param) {
29 String host = "localhost";
30 String connectStr = String.format("winmgmts:\\\\%s\\root\\CIMV2", host);
31 ActiveXComponent wmi = new ActiveXComponent(connectStr);
32 Variant[] vs = new Variant[param.length + 1];
33 vs[0] = new Variant(query);
34 for (int i = 0; i < param.length; i++) {
35 vs[i + 1] = new Variant(param[i]);
36 }
37 Variant vCollection = wmi.invoke("ExecQuery", vs);
38 return vCollection;
39 }
40
41 }