使用 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 了解更多示例。
我对 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 了解更多示例。