为什么我对winapi GetWindowPlacement的调用失败(使用JNA)? [英] Why does my call to winapi GetWindowPlacement fail (using JNA)?

查看:602
本文介绍了为什么我对winapi GetWindowPlacement的调用失败(使用JNA)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这些是winapi方法

These are the winapi methods

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代码: -

My Java code:-

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:函数GetWindowPlacement的参数1处的不支持的参数类型jna.extra.WINDOWPLACEMENT

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

如何使用GetWindowPlacement / SetWindowPlacement with JNA?

How to use GetWindowPlacement/SetWindowPlacement with JNA?

推荐答案

java.extra.WINDOWPLACEMENT 必须extend com.sun.jna.Structure 并正确实现 getFieldOrder()

java.extra.WINDOWPLACEMENT must extend com.sun.jna.Structure and properly implement getFieldOrder().

编辑

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

Setting length in the constructor, and getFieldOrder() definition:

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

这篇关于为什么我对winapi GetWindowPlacement的调用失败(使用JNA)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆