检索项文本与JNA和SendMessage函数()(Retrieving item text wit

2019-10-18 04:31发布

我试图检索一个Win32的ListView样控制项文本。 我使用JNA和SendMessageW()来LVM_GETITEMTEXTW发送给控制。 我已经成功在(通过LVM_GETITEMCOUNT)检索该项目计数,但在这一点上很为难。 我USER32类的设置,如下所示:

public interface MyUser32 extends User32 {

    MyUser32 INSTANCE = (MyUser32)Native.loadLibrary("user32", MyUser32.class);
    LRESULT SendMessageW(HWND hWnd, int msg, WPARAM wParam, LVITEM lParam); 

}

我LVITEM类的设置,如下所示:

public class LVITEM extends Structure{


    public LVITEM() {
        pszText = new Memory(MEMSIZE);
        cchTextMax = MEMSIZE;
    }

    private static final int MEMSIZE = 256;

    public UINT mask;
    public int iItem;
    public int iSubItem;
    public UINT state;
    public UINT stateMask;
    public Pointer pszText;
    public int cchTextMax;
    public int iImage;
    public LPARAM lParam;
    public int iIndent;

    protected List<String> getFieldOrder() {    
        return Arrays.asList(new String[] { "mask", "iItem", "iSubItem", "state", "stateMask", "pszText", "cchTextMax", "iImage", "lParam", "iIndent"});    
    }
}

并调用它所有的代码如下所示:

MyUser32 u32 = MyUser32.INSTANCE;   
LVITEM lvItem = new LVITEM();
WPARAM wPar = new WPARAM(1);

...

lvItem.iSubItem = 0;
res = u32.SendMessageW(handle, LVM_GETITEMTEXTW, wPar, lvItem);

System.out.println(res.intValue());
s = lvItem.pszText.getString(0);        
System.out.println(s);

我已经离开了一下代码,但我相信这些都是重要的组成部分。 我的问题是,当我打印出来res.intValue()它始终是0(意味着没有返回文本),当我打印出来pszText的字符串值,它始终是一些乱码。 我在这一点上完全难住了,因此任何建议是极大的赞赏。 谢谢。

文章来源: Retrieving item text with JNA and SendMessage()