Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java检索给定Win32_*类对象的所有属性_Java_Windows_Winapi_Wmi_Jacob - Fatal编程技术网

Java检索给定Win32_*类对象的所有属性

Java检索给定Win32_*类对象的所有属性,java,windows,winapi,wmi,jacob,Java,Windows,Winapi,Wmi,Jacob,我目前正在一个基于java的跨平台软件分发服务器上工作,我选择使用本机操作系统机制,以避免用户必须在安装之前进行任何设置 我为SSH2选择了JSCH,为Java选择了JACOB。我意识到JACOB将我限制在Windows上作为起始主机,但这是我可以接受的 我正在围绕JACOB编写一个包装器,以使用一些本机机制通过WMI与目标通信,我遇到了一个小问题。我正在尝试检索给定Win32_uuClass对象的所有可用属性的列表,但未能执行此操作 这个链接显示了你可以在VB中实现它,我想知道在使用JACOB

我目前正在一个基于java的跨平台软件分发服务器上工作,我选择使用本机操作系统机制,以避免用户必须在安装之前进行任何设置

我为SSH2选择了JSCH,为Java选择了JACOB。我意识到JACOB将我限制在Windows上作为起始主机,但这是我可以接受的

我正在围绕JACOB编写一个包装器,以使用一些本机机制通过WMI与目标通信,我遇到了一个小问题。我正在尝试检索给定Win32_uuClass对象的所有可用属性的列表,但未能执行此操作

这个链接显示了你可以在VB中实现它,我想知道在使用JACOB时是否有人能够理解它

编辑:(代码段)


上面的代码显示我可以询问单个属性,但没有一个好方法可以询问所有属性。

以下是您问题的答案。我希望如此,因为我不知道你的问题到底出在哪里。我仍然认为,当询问时,您应该提供代码的一部分,而不是要求回答者编写所有内容

这可能也是我刚刚学到的一个更普遍问题的答案:
如何枚举集合中的所有项,为每个构造实现

应该使用
EnumVariant
Jacob类

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

本例中的起点是
GetObject()
vbscript函数。我总是用Jacob开头的
CreateObject()
等效项,所以我不知道这是否可行。有一篇关于尝试访问WMI的帖子没有得到回复,我回复了这篇帖子,尽管它已经快一年了。我知道如何访问单个属性,但我想找到一种查询所有可用属性的方法。请将您的代码发布到这里,以便我们了解问题的确切位置。我们可以从那一刻开始,而不是从头开始:)。谢谢。关于
GetObject()
。查看
Dispatch.cpp
表明,如果activex组件名称包含
,则它将被视为监视器,并进行
CoGetObject
调用。这就是您的代码的工作方式,因此问题必须进一步出现。此代码片段对我没有多大帮助,因为它不是我可以运行并尝试改进的代码。我不知道你是如何得到
项的
。这是否适用于Win32\u计算机系统类?我可以要求它为这里定义的属性提供一个枚举器吗?多亏了这一点,我还没有看到任何类似的东西。这不再与Jacob有关,但我的理解是:当你有一个实例时,你无法获得属性列表。但是,您可以获得类描述并迭代应用于实例的属性和方法。看见
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;
    }
  }
}