使用JNA访问UIAutomationCore.dll

时间:2016-06-28 20:54:59

标签: java dll com jna nativelibrary

我对JNA非常陌生,有点迷茫。我想使用" GetRootElement "我的java程序中 UIAutomationCore.dll 内的 IUIAutomation界面中出现的方法。

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

非常感谢。

更新:

我尝试用Daniel提供的链接做一些事情,现在我面临一些其他问题。 未注册的课程 。这是我的代码:

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)

有人能告诉我我做错了什么吗?

1 个答案:

答案 0 :(得分:0)

最好的教程是JNA项目网站上的Getting Started链接。

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

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