使用 JNA 访问 UIAutomationCore.dll

accessing UIAutomationCore.dll using JNA

我对 JNA 非常陌生,有点迷茫。我想使用 UIAutomationCore.dll[=40= 中 IUIAutomation 接口 中的“GetRootElement”方法] 在我的 java 程序中。

有人可以帮我提供一些教程或代码吗?

非常感谢。

更新:

我尝试用 Daniel 提供的链接做一些事情,但现在我遇到了一些其他的麻烦。 Class未注册。这是我的代码:

test.java

public class test {

public interface UIAutomationCore extends Library{
    UIAutomationCore INSTANCE = (UIAutomationCore) Native.loadLibrary("UIAutomationCore", UIAutomationCore.class);

    IUIAutomationElement GetRootElement();
}

 public static void main(String[] args) {

     othermethod();
     //System.out.println(a.toString());
 }
 public static void othermethod(){
     IUIAutomation a = FactorySecond.createCUIAutomation();
     System.out.println(a.toString());
 }
}

FactorySecond.java

public abstract class FactorySecond {
 private FactorySecond() {}

 public static net.java.dev.jna.jna.IUIAutomation createCUIAutomation() {

  Factory factory = new Factory();
  return factory.createObject(net.java.dev.jna.jna.IUIAutomation.class);
 }
}

IUIAutomation.java

@ComObject(clsId="{30CBE57D-D9D0-452A-AB13-7AC5AC4825EE}")
public interface IUIAutomation extends IUnknown {
 @VTID(5)
    net.java.dev.jna.jna.IUIAutomationElement getRootElement();
}

它给出了例外:

Exception in thread "main" com.sun.jna.platform.win32.COM.COMException: Class not registered (puArgErr=)
at com.sun.jna.platform.win32.COM.COMUtils.checkRC(COMUtils.java:112)
at com.sun.jna.platform.win32.COM.COMUtils.checkRC(COMUtils.java:95)
at com.sun.jna.platform.win32.COM.util.Factory.createObject(Factory.java:151)
at net.java.dev.jna.jna.FactorySecond.createCUIAutomation(FactorySecond.java:11)
at net.java.dev.jna.jna.test.othermethod(test.java:21)
at net.java.dev.jna.jna.test.main(test.java:17)

谁能告诉我我做错了什么?

最好的教程是 JNA 项目站点上的 Getting Started link。

您将执行类似的操作,加载本机库 (UIAutomationCore),然后将 GetRootElement 的函数声明编写为 Java 方法,将 JNA 类型映射到 Java 类型。

查看 other Win32 library implementations 了解更多示例。