我正在尝试使用Java Native Access SDK获取前台窗口的坐标。我刚开始时遇到错误:
Exception in thread "main" java.lang.IllegalArgumentException: Unrecognized calling convention: 3
at com.sun.jna.Native.invokePointer(Native Method)
at com.sun.jna.Function.invokePointer(Function.java:477)
at com.sun.jna.Function.invoke(Function.java:411)
at com.sun.jna.Function.invoke(Function.java:323)
at com.sun.jna.Library$Handler.invoke(Library.java:236)
at com.sun.proxy.$Proxy0.GetForegroundWindow(Unknown Source)
at test.Test.main(Test.java:42)
Java Result: 1
我在Test.java中唯一的代码是:
import com.sun.jna.Native;
import com.sun.jna.platform.win32.WinDef.HWND;
import com.sun.jna.platform.win32.User32;
public class Test {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws Exception {
HWND fgWindow = User32.INSTANCE.GetForegroundWindow();
}
}
代码将编译,我能够检索User32.INSTANCE,所以这不是问题。只有在我尝试访问方法GetForegroundWindow()时才会出现此问题。我还试图通过解压缩源文件并将它们添加到源文件夹中的项目来编译jar文件来解决这个问题。没有编译错误,但错误仍然存在。我还尝试使用在代码中添加额外接口的选项:
public interface User32 extends StdCallLibrary {
User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class);
HWND GetForegroundWindow(); // add this
int GetWindowTextA(PointerType hWnd, byte[] lpString, int nMaxCount);
}
但错误仍然存在......
我该怎么办?
编辑:我在Windows 10系统上使用此代码。