KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jinterop > dcom > test > MSWMI


1 package org.jinterop.dcom.test;
2
3
4
5 import java.net.UnknownHostException JavaDoc;
6
7 import org.jinterop.dcom.common.JIException;
8 import org.jinterop.dcom.common.JISystem;
9 import org.jinterop.dcom.core.IJIComObject;
10 import org.jinterop.dcom.core.JIArray;
11 import org.jinterop.dcom.core.JICallObject;
12 import org.jinterop.dcom.core.JIComServer;
13 import org.jinterop.dcom.core.JIFlags;
14 import org.jinterop.dcom.core.JIInterfacePointer;
15 import org.jinterop.dcom.core.JIProgId;
16 import org.jinterop.dcom.core.JISession;
17 import org.jinterop.dcom.core.JIString;
18 import org.jinterop.dcom.core.JIVariant;
19 import org.jinterop.dcom.win32.ComFactory;
20 import org.jinterop.dcom.win32.IJIDispatch;
21 import org.jinterop.dcom.win32.IJIEnumVARIANT;
22
23
24 public class MSWMI {
25
26     private JIComServer comStub = null;
27     private IJIComObject comObject = null;
28     private IJIDispatch dispatch = null;
29     private String JavaDoc address = null;
30     private JISession session = null;
31     public MSWMI(String JavaDoc address, String JavaDoc[] args) throws JIException, UnknownHostException JavaDoc
32     {
33         this.address = address;
34         session = JISession.createSession(args[1],args[2],args[3]);
35         comStub = new JIComServer(JIProgId.valueOf(session,"WbemScripting.SWbemLocator"),address,session);
36         IJIComObject unknown = comStub.createInstance();
37         comObject = (IJIComObject)unknown.queryInterface("76A6415B-CB41-11d1-8B02-00600806D9B6");//ISWbemLocator
38
//This will obtain the dispatch interface
39
dispatch = (IJIDispatch)ComFactory.createCOMInstance(ComFactory.IID_IDispatch,comObject);
40     }
41     
42     
43     public void performOp() throws JIException, InterruptedException JavaDoc
44     {
45         System.gc();
46         Object JavaDoc results[] = dispatch.callMethodA("ConnectServer",new Object JavaDoc[]{new JIString(address),JIVariant.OPTIONAL_PARAM,JIVariant.OPTIONAL_PARAM,JIVariant.OPTIONAL_PARAM
47                 ,JIVariant.OPTIONAL_PARAM,JIVariant.OPTIONAL_PARAM,new Integer JavaDoc(0),JIVariant.OPTIONAL_PARAM});
48         
49         //using the dispatch results above you can use the "ConnectServer" api to retrieve a pointer to IJIDispatch
50
//of ISWbemServices
51

52         //OR
53
//Make a direct call like below , in this case you would get back an interface pointer to ISWbemServices , NOT to it's IDispatch
54
JICallObject callObject = new JICallObject(comObject.getIpid());
55         callObject.addInParamAsString(address,JIFlags.FLAG_REPRESENTATION_STRING_BSTR);
56         callObject.addInParamAsString("",JIFlags.FLAG_REPRESENTATION_STRING_BSTR);
57         callObject.addInParamAsString("",JIFlags.FLAG_REPRESENTATION_STRING_BSTR);
58         callObject.addInParamAsString("",JIFlags.FLAG_REPRESENTATION_STRING_BSTR);
59         callObject.addInParamAsString("",JIFlags.FLAG_REPRESENTATION_STRING_BSTR);
60         callObject.addInParamAsString("",JIFlags.FLAG_REPRESENTATION_STRING_BSTR);
61         callObject.addInParamAsInt(0,JIFlags.FLAG_NULL);
62         callObject.addInParamAsPointer(null,JIFlags.FLAG_NULL);
63         callObject.setOpnum(0);
64         callObject.addOutParamAsType(JIInterfacePointer.class,JIFlags.FLAG_NULL);
65         JIInterfacePointer interfacePointer = (JIInterfacePointer)((Object JavaDoc[])comObject.call(callObject))[0];
66         IJIComObject wbemServices = ComFactory.createCOMInstance(comObject,interfacePointer);
67         
68         //Lets have a look at both.
69
IJIDispatch wbemServices_dispatch = (IJIDispatch)ComFactory.createCOMInstance(comObject,((JIVariant)results[0]).getObjectAsInterfacePointer());
70         results = wbemServices_dispatch.callMethodA("InstancesOf", new Object JavaDoc[]{new JIString("Win32_Process"), new Integer JavaDoc(0), JIVariant.OPTIONAL_PARAM});
71         IJIDispatch wbemObjectSet_dispatch = (IJIDispatch)ComFactory.createCOMInstance(comObject,((JIVariant)results[0]).getObjectAsInterfacePointer());
72         JIVariant variant = wbemObjectSet_dispatch.get("_NewEnum");
73         IJIComObject object2 = ComFactory.createCOMInstance(wbemObjectSet_dispatch,variant.getObjectAsInterfacePointer());
74         IJIEnumVARIANT enumVARIANT = (IJIEnumVARIANT)ComFactory.createCOMInstance(IJIEnumVARIANT.IID,object2);
75         
76         //This will return back a dispatch of ISWbemObjectSet
77

78         //OR
79
//It returns back the pointer to ISWbemObjectSet
80
callObject = new JICallObject(wbemServices.getIpid());
81         callObject.addInParamAsString("Win32_Process",JIFlags.FLAG_REPRESENTATION_STRING_BSTR);
82         callObject.addInParamAsInt(0,JIFlags.FLAG_NULL);
83         callObject.addInParamAsPointer(null,JIFlags.FLAG_NULL);
84         callObject.setOpnum(4);
85         callObject.addOutParamAsType(JIInterfacePointer.class,JIFlags.FLAG_NULL);
86         interfacePointer = (JIInterfacePointer)((Object JavaDoc[])wbemServices.call(callObject))[0];
87         IJIComObject wbemObjectSet = ComFactory.createCOMInstance(wbemServices,interfacePointer);
88         
89         //okay seen enough of the other usage, lets just stick to disptach, it's lot simpler
90
JIVariant Count = wbemObjectSet_dispatch.get("Count");
91         int count = Count.getObjectAsInt();
92         for (int i = 0; i < count; i++)
93         {
94             Object JavaDoc[] values = enumVARIANT.next(1);
95             JIArray array = (JIArray)values[0];
96             Object JavaDoc[] arrayObj = (Object JavaDoc[])array.getArrayInstance();
97             for (int j = 0; j < arrayObj.length; j++)
98             {
99                 IJIDispatch wbemObject_dispatch = (IJIDispatch)ComFactory.createCOMInstance(wbemObjectSet_dispatch,((JIVariant)arrayObj[j]).getObjectAsInterfacePointer());
100                 JIVariant variant2 = (JIVariant)(wbemObject_dispatch.callMethodA("GetObjectText_",new Object JavaDoc[]{new Integer JavaDoc(1)}))[0];
101                 System.out.println(variant2.getObjectAsString().getString());
102                 System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
103             }
104         }
105         
106         JISession.destroySession(session);
107     }
108     
109     public static void main(String JavaDoc[] args) {
110
111         try {
112                 if (args.length < 4)
113                 {
114                     System.out.println("Please provide address domain username password");
115                     return;
116                 }
117                 JISystem.setAutoRegisteration(true);
118                 MSWMI test = new MSWMI(args[0],args);
119                 test.performOp();
120             } catch (Exception JavaDoc e) {
121                 // TODO Auto-generated catch block
122
e.printStackTrace();
123             }
124     }
125     
126     
127     
128     
129     
130 }
131
Popular Tags