| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > VB .NET > Получить текст из ListBox другой программы |
| Автор: Pilger 4.7.2008, 00:36 | ||||
| Здравствуйте! Имеется чужая программа с ListBox'ом на ней. Требуется получить из этого ListBox'а текст под последним заполненным индексом (в другой программе). Количество элементов в ListBox'е я нашел:
Длину нужного индекса тоже:
Вопрос: Как теперь достать текст из нужного мне индекса? Я смотрел, как это делается на C++, но тут что то не сходится. Куда он должен сохранять значение и как его получить, если функция возвращает Integer? Заранее спасибо. |
| Автор: Partizan 4.7.2008, 17:44 |
| Pilger, LB_GETTEXT ... в lParam индекс строки, в wParam передаётся указатель на буфер, в который запишется текст... если я не ошибаюсь там какието грабли с записью в буфер...тоесть память под строку надо выделять в адресном пространстве процесса, в котором находится листбокс...и читать соответственно тоже оттуда придётся... |
| Автор: Pilger 6.7.2008, 02:58 |
| Большое спасибо за наводку. Будем рыть в этом направлении. |
| Автор: DarkDragon 18.7.2008, 13:04 | ||
| Partizan, точнее, так: wParam - index lParam - pointer on buffer никаких граблей не должно быть, просто нужно буфер символов увеличить этак на 4 : Простите непомню как на VB.NET
|
| Автор: Partizan 18.7.2008, 13:25 |
| DarkDragon, если выделить память в одном процессе и передать указатель в другой процесс, то грабли будут гарантированно, т.к. каждый процесс имеет своё собственное адресное пространство. |
| Автор: Partizan 18.7.2008, 17:01 |
| DarkDragon, у меня лично были такие грабли с чтением текста из статусбара стороннего процесса... |
| Автор: DarkDragon 18.7.2008, 20:04 | ||
| Дело в том что правильно организованные данные и передача аргументов решает практически все проблемы. Насколько я помню грабли могут появиться в работе с буфером обмена (Clipboard) там требуется глобальное выделение памяти, а иначе можно получить костыли. Еще могу советовать почаще заглядывать в MSDN, т. к. если есть какие-то нюансы, Microsoft добропорядочно описывает их (конечно в MSDN не найдешь недокументированных возможностей, но кто мешает использовать DDK?) Ну вот окончательно попробуйте вот это:
Должно сработать |
| Автор: Pilger 19.7.2008, 18:41 | ||
Большое спасибо! Все получилось. (как раз вернулся из отпуска) Решение на VB Net.
Большое спасибо за помощь. Я не могу повысить вам репутацию, к сожалению. Если можно, то повысьте пожалуйста от моего имени. |