1

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 の文字列値を印刷すると、常にゴミ文字になることです。私はこの時点で完全に困惑しているので、どんな提案も大歓迎です。ありがとう。

4

0 に答える 0