![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| ykarat |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 10.12.2002 Репутация: нет Всего: нет |
Возника проблема!
Нужно получить данные о ListView (какие поля чем заполнены) в чужом окне (чужого приложения). (Кстати с этим прекрасно справляется такая тестовая тулза как Rаtional Robot). Я использую вызов SendMessage(hWnd, LVM_GETITEMW, 0, (LPARAM) &pItem); где pItem переменная типа LVITEMW, у меня заполнена некоторыми значениями. Но когда я смотрю прошедший вызов чере MS Spy я вижу что в lParam значения совершенно левые... Всвязи с этим вопрос: в чем я, наивный, ошибаюсь, и каким образом мне все-таки получить список значений из ListView? Может кто знает? |
|||
|
||||
| Step |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
Интересное сообщения, что-то в MSDN я его так и не нашел, но нашел другие которые позволяют выполнить твою задачу
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
||||
|
|||||
| ykarat |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 10.12.2002 Репутация: нет Всего: нет |
LVM_GETITEMW cиноним LVM_GETITEM и оба они определяются через LVM_FIRST+5 где-то в видошных хедерах.
Дело в том что когда я в Spy смотрю как эти данные забирает Rational Robot я вижу что передается сообщение LVM_GETITEM (1005) и параметр lParam который указывает на структуру LV_ITEMA, и все в этой структуре зашибись: по очереди опрашиваются все isubItem из iItem на предмет - mask=LVIF_TEXT. Возращаемое значение в pszText содержится нужное мне поле из ListView. Когда я из своей програмки пытаюсь сделать SendMessage с теми же параметрами то в Spy я вижу что ID сообщения = LVM_GETITEM (1005) т.е. правильное но в lParam - полная билиберда из абстрактного участка памяти (время от времени содержимое самопроизвольно изменяется)... Вот такая вот ерунда... |
|||
|
||||
| Step |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
Значит необходимо отправить еще ряд предворительніх сообщений, типа пазиционирования указателя и т.д.
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
| ykarat |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 10.12.2002 Репутация: нет Всего: нет |
А как это делается технически?
У меня например такой код: LVITEMW pItem; // структура char szBuffer[20]; // буфер для названия memset(&pItem,0,sizeof(pItem)); // обнуляем структуру pItem.iItem=1; pItem.isubItem=1; // этого элемента информацию мы хотим получить pItem.mask= LVIF_TEXT ; // тип получаемой информации pItem.pszText = szBuffer; // куда вернуть pItem.cchTextMax=19; // размер буфера = размер char-1 для завершения строки LPARAM lpT = (LPARAM)&pItem; hWndHeader = (HWND) SendMessage(hWnd, LVM_GETITEMW, 0, lpT); Что нужно добавить чтобы информация из lpT нармально передалась ListView и в szBuffer оказалась информация из ListView. |
|||
|
||||
| Step |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
отправь lvm_getitemnext перед отправкой своего сообщения параметры посмотри в хелепе
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
| ykarat |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 10.12.2002 Репутация: нет Всего: нет |
Нет, не помогает... Сама по себе
int k = ListView_GetNextItem(hWnd,1, LVNI_BELOW); правильно отрабатывает но как только я использую вызов у которого в качестве параметров указатель... сразу все растраивается... Видимо та программа не может получить нормально доступ к памяти которую я ей подсовываю... Нужно найти как этот момент обойти. Ладно буду дальше разбираться. Спасибо. |
|||
|
||||
| Step |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
покажи код с указателем
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
| ykarat |
|
|||
|
Unregistered |
Решение подсказали в форуме на www.rsdn.ru.
В кратце - нужно поместить код в DLL подгузить ее в процесс с ListView и еще ссылка: http://www.rsdn.ru/article/default.asp?baseserv/IntercetionAPI.xml |
|||
|
||||
| Step |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
Как это: подгрузить в процес раскажи. -------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |