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 }