java - 为什么我对 winapi GetWindowPlacement 的调用失败(使用 JNA)?

标签 java winapi jna

这些是 winapi 方法

BOOL WINAPI SetWindowPlacement(
  _In_       HWND            hWnd,
  _In_ const WINDOWPLACEMENT *lpwndpl
);
typedef struct tagWINDOWPLACEMENT {
  UINT  length;
  UINT  flags;
  UINT  showCmd;
  POINT ptMinPosition;
  POINT ptMaxPosition;
  RECT  rcNormalPosition;
} WINDOWPLACEMENT, *PWINDOWPLACEMENT, *LPWINDOWPLACEMENT;

我的Java代码:-

class WINDOWPLACEMENT{
   public int length;
   public int flags;
   public int showCmd;
   public POINT    ptMinPosition;
   public POINT    ptMaxPosition;
   public RECT     rcNormalPosition;
}
WINDOWPLACEMENT wind = new WINDOWPLACEMENT();
User32Extra.INSTANCE.GetWindowPlacement(hwndLSM, wind);

错误是

java.lang.IllegalArgumentException: Unsupported argument type jna.extra.WINDOWPLACEMENT at parameter 1 of function GetWindowPlacement

如何通过 JNA 使用 GetWindowPlacement/SetWindowPlacement?

最佳答案

java.extra.WINDOWPLACMENT 必须扩展 com.sun.jna.Structure 并正确实现 getFieldOrder()

编辑

在构造函数中设置长度,以及getFieldOrder()定义:

public class WINDOWPLACEMENT extends Structure {
    public WINDOWPLACEMENT() {
        this.length = size();
    }
    public List getFieldOrder() {
        return Arrays.asList("length", "flags", "showCmd", "ptMinPosition", "ptMaxPosition", "rcNormalPosition");
    }
    // ...
}

关于java - 为什么我对 winapi GetWindowPlacement 的调用失败(使用 JNA)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31312793/

相关文章:

java - 没有看到 EditNameDialogListener 界面

Java 正则表达式 从文本中替换日期

java - 如何将 spring.cloud.stream.kafka.bindings 配置属性应用于所有消费者

c++ - 缺少 Commctl.h

java - 为什么这个线程(WriteData)没有执行它的功能?

c++ - 只要不是永远等待,就可以在 DllMain (PROCESS_DETATCH) 中等待吗?

winapi - 是否有 Win32 API 来监视、定位和定位 Taskbar "Notification Area"?

java - 从当前 COME 后期绑定(bind)对象获取进程 ID

Java:加载具有依赖项的共享库

java - 从 Java 调用扫描仪 Win32 DLL