我对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)
有人能告诉我我做错了什么吗?
答案 0 :(得分:0)
最好的教程是JNA项目网站上的Getting Started链接。
您将做类似的事情,加载本机库(UIAutomationCore),然后将GetRootElement的函数声明编写为Java方法,将JNA类型映射到Java类型。
查看other Win32 library implementations了解更多示例。