Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите разобраться с SendMessage, Как получить поля из чужого ListView 
:(
    Опции темы
ykarat
  Дата 10.12.2002, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 10.12.2002

Репутация: нет
Всего: нет



Возника проблема!

Нужно получить данные о ListView (какие поля чем заполнены) в чужом окне (чужого приложения). (Кстати с этим прекрасно справляется такая тестовая тулза как Rаtional Robot).

Я использую вызов
SendMessage(hWnd, LVM_GETITEMW, 0, (LPARAM) &pItem);
где pItem переменная типа LVITEMW, у меня заполнена некоторыми значениями.
Но когда я смотрю прошедший вызов чере MS Spy я вижу
что в lParam значения совершенно левые...

Всвязи с этим вопрос: в чем я, наивный, ошибаюсь, и каким
образом мне все-таки получить список значений из ListView?

Может кто знает? ???
PM MAIL   Вверх
Step
Дата 10.12.2002, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



Цитата
LVM_GETITEMW

Интересное сообщения, что-то в MSDN я его так и не нашел, но нашел другие которые позволяют выполнить твою задачу
Цитата
LVM_GETITEM
LVM_GETITEMNEXT



--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
ykarat
Дата 10.12.2002, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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 - полная билиберда из абстрактного участка памяти (время от времени содержимое самопроизвольно изменяется)...

Вот такая вот ерунда... :(
PM MAIL   Вверх
Step
Дата 10.12.2002, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



Значит необходимо отправить еще ряд предворительніх сообщений, типа пазиционирования указателя и т.д.


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
ykarat
Дата 10.12.2002, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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.
PM MAIL   Вверх
Step
Дата 10.12.2002, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



отправь lvm_getitemnext перед отправкой своего сообщения параметры посмотри в хелепе


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
ykarat
Дата 11.12.2002, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 10.12.2002

Репутация: нет
Всего: нет



Нет, не помогает... Сама по себе
int k = ListView_GetNextItem(hWnd,1, LVNI_BELOW);
правильно отрабатывает но как только я использую вызов у которого
в качестве параметров указатель... сразу все растраивается...
Видимо та программа не может получить нормально доступ к памяти которую
я ей подсовываю... :(
Нужно найти как этот момент обойти.

Ладно буду дальше разбираться.
Спасибо.
PM MAIL   Вверх
Step
Дата 11.12.2002, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



покажи код с указателем


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
ykarat
Дата 12.12.2002, 02:25 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Решение подсказали в форуме на www.rsdn.ru.

В кратце - нужно поместить код в DLL подгузить ее в процесс с ListView

и еще ссылка:
http://www.rsdn.ru/article/default.asp?baseserv/IntercetionAPI.xml
  Вверх
Step
Дата 12.12.2002, 04:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



Цитата(Guest @ 11.12.2002, 18:25)
Решение подсказали в форуме на www.rsdn.ru.

В кратце - нужно поместить код в DLL подгузить ее в процесс с ListView

и еще ссылка:
http://www.rsdn.ru/article/default.asp?baseserv/IntercetionAPI.xml

Как это: подгрузить в процес раскажи.


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1273 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.