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 }

 

posted @ 2013-07-12 09:56  向往大海的葉子  阅读(876)  评论(0编辑  收藏  举报