Frage

Ich arbeite derzeit an einem Java-basierten plattformübergreifenden Software-Distributor und habe mich für die Verwendung nativer Betriebssystemmechanismen entschieden, um zu verhindern, dass die Benutzer vorher irgendwelche Einstellungen vornehmen müssen.

Ich habe JSCH für SSH2 und JACOB für Java gewählt.Mir ist klar, dass JACOB mich auf Windows als Starthost beschränkt, aber damit kann ich leben.

Ich schreibe einen Wrapper für JACOB, um einige der nativen Mechanismen für die Kommunikation mit dem Ziel über WMI zu verwenden, und stoße auf ein kleines Problem.Ich versuche, eine Liste ALLER Eigenschaften abzurufen, die für ein bestimmtes Win32_-Klassenobjekt verfügbar sind, aber es ist mir nicht gelungen.

Dieser Link zeigt, dass Sie es in VB tun können http://www.vbsedit.com/scripts/misc/wmi/scr_1333.asp und ich habe mich gefragt, ob es irgendjemand mit JACOB herausgefunden hat.

BEARBEITEN :(Code-Auszug)

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);

Der obige Code zeigt, dass ich nach einzelnen Eigenschaften fragen kann, aber es gibt keine gute Möglichkeit, nach ALLEN Eigenschaften zu fragen.

War es hilfreich?

Lösung

Hier ist die Antwort auf Ihre Frage.Ich hoffe es, denn ich weiß nicht, wo genau dein Problem liegt.Ich bin immer noch der Meinung, dass man bei Fragen den Teil des Codes angeben sollte, anstatt vom Antwortenden zu verlangen, alles zu schreiben.

Dies könnte auch eine Antwort auf ein allgemeineres Problem sein, das ich gerade erfahren habe:
So listen Sie alle Elemente in einer Sammlung auf, implementieren For Each bauen?
Man sollte verwenden EnumVariant Jacob-Klasse.

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;
    }
  }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top