JNA: передать указатель на структуру функции SendMessage для User32.dll в качестве LPARAM

Мне нужно выполнить простую задачу: распечатать имена элементов списка в окне обозревателя. Предположим, я открываюC: \ Documents and Settings " на моем рабочем столе я хочу написать java-программу, использующую JNA для распечатки всех имен папок / файлов в открытом окне проводника.

Что я смог сделать: получить дескриптор открытого окна проводника и дескриптор списка в нем.

Что я обнаружил: мне нужно вызвать функцию SendMessage для User32.dll и передать ее дескриптор представлению списка, указанному выше, вместе с кодом сообщения (который (0x1000 + 45) для LVM_GETITEMTEXTA), а также на основе 0 порядковый номер элемента представления списка, имя которого мне нужно получить, и LPARAM (который является длинным значением). Этот LPARAM будет принимать указатель на структуру типа LVITEM. Вы можете обратиться к документации сообщения здесь:http://msdn.microsoft.com/en-us/library/windows/desktop/bb761055(v=vs.85).aspx

Я создал структуру LVITEM в своем интерфейсе для User32 следующим образом:

public static class LVITEM extends Structure
    {
        public short mask;
        public int iItem;
        public int iSubItem;
        public short state;
        public short stateMask;
        public char[] pszText;
        public int cchTextMax;
        public int iImage;
        public LPARAM lParam;
        public int iIndent;

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

    }

Моя структура инициализации выглядит следующим образом:

User32.LVITEM lvItem = new User32.LVITEM(); //User32 is the name of the interface containing the LVITEM structure
lvItem.mask = 0x00000001; //code for LVIF_TEXT
lvItem.pszText= new char[260];
lvItem.iSubItem = 0;
lvItem.cchTextMax = 260;

Я вызываю функцию SendMessage внутри цикла for, чтобы напечатать имена всех элементов представления списка следующим образом:

for(int j=0;j

Ответы на вопрос(1)

Ваш ответ на вопрос