يقوم Java JACOB باسترداد كافة الخصائص لكائن فئة Win32_* محدد

StackOverflow https://stackoverflow.com//questions/12698653

سؤال

أنا أعمل حاليًا على موزع برامج عبر الأنظمة الأساسية يعتمد على 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;
    }
  }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top