يقوم Java JACOB باسترداد كافة الخصائص لكائن فئة Win32_* محدد
سؤال
أنا أعمل حاليًا على موزع برامج عبر الأنظمة الأساسية يعتمد على Java واخترت استخدام آليات نظام التشغيل الأصلية لمنع المستخدمين من الاضطرار إلى القيام بأي إعداد مسبقًا.
لقد اخترت JSCH لـ SSH2 وJACOB لـ Java.أدرك أن JACOB يقتصر استخدامي على Windows كمضيف أول، ولكن هذا شيء يمكنني التعايش معه.
أنا أكتب غلافًا حول JACOB لاستخدام بعض الآليات الأصلية للتحدث إلى الهدف عبر WMI وأواجه مشكلة صغيرة.أحاول استرداد قائمة بجميع الخصائص المتاحة لكائن فئة Win32_ معين ولم أتمكن من القيام بذلك.
يوضح هذا الرابط أنه يمكنك القيام بذلك في VB http://www.vbsedit.com/scripts/misc/wmi/scr_1333.asp وكنت أتساءل عما إذا كان أي شخص قد تمكن من اكتشاف ذلك عند استخدام JACOB.
يحرر :(مقتطف الكود)
item = enumVariant.nextElement().toDispatch();
//Dispatch.class returns a variant which can convert to java form
String serviceName = Dispatch.call(item, "Name").toString();
String servicePath = Dispatch.call(item,"PathName").toString();
int servicePID = Dispatch.call(item,"ProcessId").getInt();
//System.out.println("Service: "+serviceName+" ServicePath: "+servicePath+" PID: "+servicePID);
//System.out.println(serviceName+" "+servicePath+" "+servicePID);
list.add(serviceName+" "+servicePID);
يوضح الرمز أعلاه أنه يمكنني طلب العقارات الفردية ولكن لا توجد طريقة جيدة لطلب جميع العقارات.
المحلول
هنا هو الجواب على سؤالك.أتمنى ذلك، لأنني لا أعرف أين تكمن مشكلتك بالضبط.ما زلت أعتقد أنه عند السؤال يجب عليك تقديم جزء من الكود بدلاً من مطالبة المجيب بكتابة كل شيء.
قد يكون هذا أيضًا إجابة لمشكلة أكثر عمومية تعلمتها للتو:
كيفية تعداد جميع العناصر في المجموعة وتنفيذها For Each
بناء؟
ينبغي للمرء أن يستخدم EnumVariant
فئة يعقوب.
import com.jacob.activeX.*;
import com.jacob.com.*;
public class testJacob {
public static void main(String args[]) {
String sMoniker = "winmgmts:{impersonationLevel=impersonate}!" +
"\\\\.\\root\\cimv2";
Dispatch dServ = new Dispatch(sMoniker);
Variant v = Dispatch.call(dServ, "SubclassesOf");
// SWbemObjectSet object
// http://msdn.microsoft.com/en-us/library/aa393762%28v=vs.85%29.aspx
Dispatch objSet = v.getDispatch();
System.out.println("object count: " + objSet.get(objSet, "count"));
int cObj = 0;
EnumVariant en = new EnumVariant(objSet);
while (en.hasMoreElements()) {
// SWbemObject object
// http://msdn.microsoft.com/en-us/library/aa393741(v=vs.85).aspx
Dispatch dItem = en.nextElement().getDispatch();
Dispatch dPath = Dispatch.get(dItem, "Path_").getDispatch();
String sClass = Dispatch.get(dPath, "Class").getString();
System.out.println("path: " + sClass);
Dispatch dObj = Dispatch.call(dServ, "get", sClass).getDispatch();
Dispatch dProps = Dispatch.call(dObj, "Properties_").getDispatch();
EnumVariant enProp = new EnumVariant(dProps);
while (enProp.hasMoreElements()) {
Dispatch dProp = enProp.nextElement().getDispatch();
String sProp = Dispatch.get(dProp, "name").getString();
System.out.println("property: " + sProp);
}
if (++cObj >= 5)
break;
}
}
}