Author Topic: Помогите с доступом из одной программы в другую  (Read 3553 times)

0 Members and 1 Guest are viewing this topic.

Offline rPman

  • Full Member
  • ***
  • Posts: 109
  • Karma: +0/-0
Есть задача автоматизации работы программы, кнопочки в ней нажимать и т.д. С кнопочками и мышкой проблем нет, но необходимо анализировать выводимое программой на экран. C простыми контролами типа EditBox, точнее теми, содержимое которых получить можно GetWindowText, проблем нет, узнал их HWND и все, но вот с ListBox...
Посылаю LVM_GETITEMCOUNT - выдает верное количество, но засылаю LVM_GETITEM или LVM_GETITEMTEXT - роняет саму программу. Аналогичное происходит при попытке покапаться в данных окна (у этого контрола есть одна Property....).
Эти листбоксы используются в куче программ, хоть с тем же regedit эксперементировал.... Винда - WinXP SP2.
Если не в курсе, пошлите меня...;) куданить, где о решении можно почитать.
P.S. Вариант со сканированием изображения и парсинга шрифтов не предлагать, делал уже подобное, больше нехочу, да и процессор грузит сильно.

Offline Macik

  • Newbie
  • *
  • Posts: 13
  • Karma: +0/-0
Вы пишите про ListBox, а примеры приводите про ListView.
Эт разные компоненты.
У меня SendMessage с некоторыми LVM_XXXXXXXX к ListView из другого потока завешивает свое же приложение, а Вы хотите узнать содержимое из другого процесса.
Поэтому пользую PostMessage. Но думаю, что Вам не подойдет.
В свое время я находил исходники по чтению и модификации содержимого десктопа. Это тот же ListView в Explorerе в виде иконок.
Ток давно эт было, лет 6 назад, и сейчас уже не найду.

Offline rPman

  • Full Member
  • ***
  • Posts: 109
  • Karma: +0/-0
Извиняюсь за ошибку, действительно я имел в виду именно List View... решение уже нашел.
Проблема в том что этот контрол работает только в своем адресном пространстве, поэтому когда я посылаю сообщение LVM_GETITEMTEXT с адресом строки, куда писать собственно текст, но в своем адресном пространстве, контрол пытается писать строку в своем по этому адресу - т.е. 'в туман', решение - сделать DLL и повесться на глобальный хук по сообщениям, тут уже моя функция будет запускаться из адресного пространства той программы, в которой хук сработал. Еще не проверял, но звучит правдоподобно.
Такой вариант мне даже удобнее, не требуется постоянно сканировать содержимое - изменения сами придут.
P.S. Хотя непонятно тогда почему работает функция GetWindowText и аналогичное ему сообщение...
« Last Edit: September 08, 2005, 17:32:26 by rPman »