Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

Re: как получить список из TListView из другой программы

Hello comp,

здесь много программеров на Delphi - подскажите такую вещь: есть
программа, написанная очевидно на Delphi или Builder'e, исходников
естественно нет. У программы есть компонент TListView.

Я с помощью своей программы хочу извлечь список строк из этого
компонента. Handle, id контрола известны. Пытаюсь сделать через
посылку сообщений LB_GETCOUNT и затем в цикле LB_GETTEXT, но это
работает только для стандартных ListBox'ов (даже не ListCtrl'ов).

Ответить   Sat, 20 Mar 2004 11:35:47 +0300 (#107890)

 

Ответы:

Hello Ghost,

Saturday, March 20, 2004, 10:35:47 AM, you wrote:

Не уверен на все 150, но, кажется, вы используете не то сообщение.
Нужно использовать LV_ITEM (см. win32.hlp).

Ответить   Вадим Шешунов Sat, 20 Mar 2004 23:50:37 +0200 (#108303)

 

Здравствуйте !

Не думаю, что вообще все это получится _таким_ образом.
Дело в том, что все указатели, возвращаемые такими сообщениями
действительны только в адресном пространстве процесса, содержащего контрол.
То есть LB_GETCOUNT и (для списка) - LVM_GETITEMCOUNT использовать
можно таким образом - вся инфа содержится в структуре сообщения,
а с LB_GETTEXT - облом. Чтобы решить эту задачу, надо внедрять
свой код в адресное пространство другого процесса. Самое простое -
загрузить туда длл - ку (например, через хук, или удаленный поток в 2000-х
виндах). В этой длл - ке получать нужные данные, а уже из длл-ки
получать данные другим процессом (например при помощи WM_COPYDATA,
общей секчии данных, MMF, каналов (pipes), или еще чего).

--
С уважением, Вахтуров Виктор.
Информационный сайт для программистов http://SoftMaker.com.ru
Номер выпуска : 2653
Возраст листа : 181 (дней)
Количество подписчиков : 375
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/108406
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Sun, 21 Mar 2004 07:52:34 +0300 (#108406)

 

Hello Victor,

Sunday, March 21, 2004, 7:52:34 AM, you wrote:

Да, именно так и получается - число строк получить можно, а сами
строки нельзя. Но для listbox'ов почему-то работает (хотя там не
структра LVITEM, а простая передача адреса строки).

интересно, как это сделать? Если можно, вышли пример кода, я с такими
вещами еще не работал.

Ответить   Mon, 22 Mar 2004 02:07:46 +0300 (#109032)

 

Здарова, Ghost!

20 марта 2004 г., суббота, 13:35:47 (GMT+05:00), ты намылил:

Как говориться - RTFM!!!!
LVM_GETITEMCOUNT
LVM_GETITEMTEXT и т.д.

Объясняю для тех кто в танке:
RTFM - Read The Fucking Manual

Для счастливых обладателей Delphi и/или Builder:

ИНСТРУКЦИЯ К ПРИМЕНЕНИЮ ХЕЛПА (читать ВСЕМ):
1) Запускаем делфу/билдер;
2) В меню Help ищем пункт Customize... , жмем, появляется окно
OpenHelp;
3) Ищем меню Edit - > Add Files...;
4) Следующую операцию проделываем на всех вкладках (Contens, Index,
Link, и Project):
Добавляем все файлы которые будут видны в окне Add File (3 пункт)
из папок:
а) С:\Program Files\Borland\Delphi5 (или CBuilder5)\Help;
б) C:\Program Files\Common Files\Borland Shared\MSHelp;
5) Сохраняем проект хелпа как delphi5.ohp;
6) Жмем F1;
7) Переходим на вкладку поиск;
8) Если вы уже создавали файл индекса, то жмем кнопку Перестроить...;
9) В появившемся мастере "Настройка поиска" выбираем следующие
настройки:
а) Выбрать особые возможности поиска - > Далее;
б) Выделить все - > Далее;
в) Включить разделы без названий - > Далее;
г) Включить поиск выражений - > Далее;
д) Отображать соответствующие образцу фразы - > Далее;
е) Обеспечить поиск по сходству - > Далее;
ж) - > Готово;
10) После построения индекса получаете зверский хелп.

PS: Для Delphi/Bulider версии отличной от 5 соответственно цифра 5
поменяется на версию продукта и т.д.

PPS: Например для поиска выше перечисленных LVM_***, у меня
ушло ~ 20 секунд:
Запуск хелпа
Переход на Поиск
Ввод фразы: "listview message get item"
Сразу в результатах поиска было замечено LVM_GETITEMTEXT, далее в этом
разделе присутствовала кнопка Group.

--
Никогда больше не буду говорить афоризмами. Да, кстати, запишите мою последнюю
фразу

Ответить   Томилов Александр Sat, 20 Mar 2004 21:13:24 +0500 (#108535)