Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Как получить Items из ListBox другого приложения? Добавлено: 01.02.10 18:35  

Автор вопроса:  andro
Всем привет!

Задача следующая нужно из окон стороннего приложения получить текст, с некоторыми окнами справился, а попался лист бокс в котором сообщение LB_GETTEXT выдает какую то абру катабру-набор символов. Думал вообще считать нельзя итемы, но в инете нашел прогу которая вытаскивает оттуда текст и записывает в текстовый файл. В файле все итемы видны. Кто нить знает как организовать алгоритм получения итемов из лист бокс. По информ из инета нашел, что как то нужно внедриться в память процесса где лист бокс, подскажите пожалуйста как это сделать?

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #1
Добавлено: 01.02.10 20:12
Этот вопрос выходит далеко за рамки VBA. Тебе дорога на wasm.ru/forum

Ответить

Номер ответа: 2
Автор ответа:
 andro



Вопросов: 1
Ответов: 3
 Профиль | | #2 Добавлено: 01.02.10 22:01
Нашел на форуме такой код
 
  1. Call GetWindowThreadProcessId(hwntbr, procid) ' найти PID окна
  2.  
  3.  
  4.    hProcess = OpenProcess(PROCESS_ALL_ACCESS Or PROCESS_DUP_HANDLE, True, procid) ' получить хендл процесса
  5.  
  6.  
  7.    prc = VirtualAllocEx(hProcess, 0, LenB(rc), MEM_COMMIT Or MEM_TOP_DOWN, PAGE_READWRITE) 'выделить память для RECT
  8.  
  9.  
  10.    Call SendMessage(hwntbr, TB_GETITEMRECT, 4, prc) ' локальные коорд. кнопки ПОИСК
  11.  
  12.  
  13.    Call ReadProcessMemory(hProcess, prc, rc, LenB(rc), rwb) 'прочитать RECT из памяти
  14.  
  15.  
  16.    Call VirtualFreeEx(hProcess, prc, LenB(rc), MEM_RELEASE) 'освободить память
  17.  
  18.  


Подойдет ли такое для работы с listBox

Ответить

Номер ответа: 3
Автор ответа:
 andro



Вопросов: 1
Ответов: 3
 Профиль | | #3 Добавлено: 01.02.10 22:01
Нашел на форуме такой код
 
  1. Call GetWindowThreadProcessId(hwntbr, procid) ' найти PID окна
  2.  
  3.  
  4.    hProcess = OpenProcess(PROCESS_ALL_ACCESS Or PROCESS_DUP_HANDLE, True, procid) ' получить хендл процесса
  5.  
  6.  
  7.    prc = VirtualAllocEx(hProcess, 0, LenB(rc), MEM_COMMIT Or MEM_TOP_DOWN, PAGE_READWRITE) 'выделить память для RECT
  8.  
  9.  
  10.    Call SendMessage(hwntbr, TB_GETITEMRECT, 4, prc) ' локальные коорд. кнопки ПОИСК
  11.  
  12.  
  13.    Call ReadProcessMemory(hProcess, prc, rc, LenB(rc), rwb) 'прочитать RECT из памяти
  14.  
  15.  
  16.    Call VirtualFreeEx(hProcess, prc, LenB(rc), MEM_RELEASE) 'освободить память
  17.  
  18.  


Подойдет ли такое для работы с listBox?

Ответить

Номер ответа: 4
Автор ответа:
 AxeL



ICQ: 264730390 

Вопросов: 2
Ответов: 106
 Профиль | | #4 Добавлено: 02.02.10 03:24
Возможно, данную задачу будет проще организовать через AutoHotkey скрипт...

Ответить

Номер ответа: 5
Автор ответа:
 andro



Вопросов: 1
Ответов: 3
 Профиль | | #5 Добавлено: 02.02.10 20:47
Что это за скрипт? Прога которая вытаскивает текст называется текст граблер, работает по HWND. Мне нужно реализовать такое же. Только как?

Ответить

Номер ответа: 6
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #6
Добавлено: 07.02.10 22:12
andro, код ты нашел довольно правильный, и ты сможешь выделить кусок памяти в АП другого процесса, так де ты сможешь его и прочитать. Осталось-лишь заставить приложение записать в эту область памяти тебе нужные данные, а именно попробовать запихнуть указатель полученный от VirtualAllocEx в SendMessage, но с сообщением LB_GETTEXT.
Получится - хорошо, нет - можно написать свою собственную длл-ку, внедрить ее до/после загрузки нужной программы в ее АП и получать данные через нее.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам