Привет всем Проблема в следующем. Необходимо получить текст ячеек из ListView другого процесса. Алгоритм прост: найти дескриптор обьекта списка в нужном процессе, получить количество элементов, в цикле посылать сообщение LVM_GETITEMTEXT. Естественно, память под LVITEM и буфер для текста ячейки выделена через VirtualAllocEx, работа со структурой через WriteProcessMemory и ReadProcessMemory. Во вложенном цикле изменяю LVITEM::iSubItem от 0 до <количество_колонок>. Так вот, кроме текста, соответствующего 0-й колонке ( то есть iSubItem = 0 ), ничего получить не удается; для iSubItem > 0 SendMessage возвращает 0, буфер для текста пуст. В чем здесь проблема? ЗЫ. Код работает на другом списке того же процесса ЗЗЫ. Первый список имеет некоторые отличия от второго в стилях: LVS_SHOWSELALWAYS, LVS_NOLABELWRAP, LVS_FULLROWSELECT, а также одна из колонок содержит рисунок, а не текст Спасибо.
Попробовал внедрить длл в процесс. Результат тот же: для 0-й колонки текст есть, для остальных - пусто
psu Тогда однозначно с размером параметра напортачил. 0 он всегда 0, что слово, что двойное. А вот если нужно двойное, а ты задал просто - будет мусор тащить. В одном месте попал на границу двойного слова и работает, а в другом тебе не повезло.
исключено, не первый раз пишу Такая, значит, штука выяснилась... ( попрошу знатоков не камняться бросами ) Этот ListView имеет стиль LVS_OWNERDRAWFIXED. Попробовал поиграться с хуками. Перехватывал как WH_CALLWNDPROС, там и WH_CALLWNDPROCRET; проверял только WM_DRAWITEM, соответственно для данного списка DRAWITEMSTRUCT::itemData содержит указатель на LVITEM. Но в LVITEM::mask ничего похожего на стандартные маски нету, 6-значные числа... В чем ошибка?
ура! все решилось Зассказываю, кому интересно. ошибка в том, что DRAWITEMSTRUCT::itemData указывает на уникальную для каждого частного случая структуру. В мое случае нужно было получить данные из eMule, а именно, о расшаренных файлах и их статистике. Формат данных, хотя и не полностью ( нет необходимости ) , разобрал с помощью олли дебагера ЗЫ. Кстати, на ту же структуру указывает и lParam из LVITEM ( можна использовать LVM_GETITEM с маской LVIF_ PARAM ) ЗЗЫ. Почти монолог получился