Выгрузка данных из хитрого окна
Всё, что можно сделать, есть в Spy++
![](/images/graemlins/smile.gif)
Открываешь студию, в меню Tools выбираешь Spy++, нажимаешь кнопку с иконкой бинокля, перетаскиваешь прицел на нужное окно и смотришь параметры.
хотя, возможно, у меня просто мало опыта
Открываешь Spy++, находишь нужный hWnd и смотришь доступные свойства. Часто (но далеко не всегда) тексты представлены как тайтл окошка, и их можно считать или записать с помощью, насколько я помню, SendMessage или PostMessage.
Ну и соответвенно можно попробовать получать текст через посылку соответсвующих сообщений/макросов как напр. ListView_GetItemText и ListView_GetItemCount.
Хотя это может только для своего LISTVIEW работает или еще че. Надо проверить как-нить на досуге.
В крайнем случае можно через CreateRemoteThread подгрузить свою dll'ку и сделать это через нее. Могу дать готовый пример программы, осуществляющей внедрение.
www.sources.ru по Delphi в разделе WinAPI - такое чувство там сделать могут что угодно ![](/images/graemlins/smile.gif)
Гы-гы, напомнило извращения с форума на ![](/images/graemlins/smile.gif)
WM_USER + 1002 (0x000007ea)
wParam: 0x00000005
lParam: 0xffffffff
Message Sent
Time: 13:11:32.0715
WM_USER + 1002 Return value
Return: 0x00000000
Message Sent
Time: 13:11:32.0715
WM_USER + 1006 (0x000007ee)
wParam: 0x00003000
lParam: 0x00000000
Message Sent
Time: 13:11:32.0715
WM_USER + 1006 Return value
Return: 0x00003000
Message Sent
Time: 13:11:32.0715
WM_USER + 1002 (0x000007ea)
wParam: 0x00000004
lParam: 0xffffffff
Message Sent
Time: 13:11:32.0715
WM_USER + 1002 Return value
Return: 0x00000000
Message Sent
Time: 13:11:32.0715
WM_USER + 1006 (0x000007ee)
wParam: 0x00003000
lParam: 0x00000000
Message Sent
Time: 13:11:32.0715
WM_USER + 1006 Return value
Return: 0x00003000
Message Sent
Time: 13:11:32.0715
WM_USER + 1002 (0x000007ea)
wParam: 0x00000003
lParam: 0xffffffff
Message Sent
Time: 13:11:32.0715
WM_USER + 1002 Return value
Return: 0x00000000
Message Sent
Time: 13:11:32.0715
WM_USER + 1006 (0x000007ee)
wParam: 0x00003000
lParam: 0x00000000
Message Sent
Time: 13:11:32.0715
WM_USER + 1006 Return value
Return: 0x00003000
Message Sent
Time: 13:11:32.0715
WM_USER + 1002 (0x000007ea)
wParam: 0x00000002
lParam: 0xffffffff
Message Sent
Time: 13:11:32.0715
WM_USER + 1002 Return value
Return: 0x00000000
Message Sent
Time: 13:11:32.0715
WM_USER + 1006 (0x000007ee)
wParam: 0x00003000
lParam: 0x00000000
Message Sent
Time: 13:11:32.0715
WM_USER + 1006 Return value
Return: 0x00003000
Message Sent
Time: 13:11:32.0715
свойства окна смотри, а не сообщения
стандартные макросы не подходят это какой-то рукописный лист.
Item Value
Class Name MultiList
Text
Rectangle 13, 92, 140, 488
Size 127, 396
Client Rectangle 0, 0, 127, 396
Client Size 127, 396
Styles WS_CHILD
WS_VISIBLE
StylesEx WS_EX_LEFT
WS_EX_LTRREADING
WS_EX_RIGHTSCROLLBAR
ID 0
Properties
Class specific Window is Ansi
судя по картинке, Spy не поможет
хотя, возможно, у меня просто мало опыта
Проверил - для окна чужого приложения макросы работают. Для рукописного листа, если он сделан поверх стандартного по идее тоже должно работать. Если же каждая строка это другой тип окна, то надо его определить - в TotalCommander панелька списока файлов например это TMyListBox - у которого элементы это обернутые TEdit судя по всему (то есть текст сдирается обычным посылом WM_GETTEXT).
А их можно селектить? Если да, то напиши прогу, которая эмулирует нажатия разных кнопок и тырит цифирки из клипборда =)
LV_GETITEM всё-таки попробуй
такие циферки и распознать недолго, если лень можно и шрифт заменить на самопал легко распознающийся.
пробовал не фига
обходные решения:
1. распознать
2. перехватить функцию DrawText (или как она там)
3. попробовать заставить его вывести в какой-нибудь метафайл
а это не джававское окошко?
нет это не джавовское окошко. прога на плюсах похоже написана.
А по сетке данные отловить не пробовал? =)
они зашифрованы.
http://forum.sources.ru/index.php?showtopic=140506 похожая тема
Кстати вот тут
А кому ты сообщение шлешь?
MultiList - у
У него же есть дочерние списки, им надо
чайлдовых окон у него нет.
А на чём это вообще писано? Маза поискать контрол в инете.
![](/images/graemlins/laugh.gif)
написано это какими-то прогерами из сибирискорее всего дельфа =)
![](/images/graemlins/smile.gif)
![](/images/graemlins/laugh.gif)
нет не проще. трейдеры работают только через эту систему.
откуда такой вывод?
![](/images/graemlins/smirk.gif)
по экзешнику не запакованному не так сложно определить чем он собран.
этот контрол что-нить умеет?
ресайзится или сортироватся?
можно конечно прямо в памяти процесс поискать эти цифки и порюхать структуры, но это как повезёт.
большинство таких поделиймного видел?
можно конечно прямо в памяти процесс поискать эти цифки и порюхать структуры, но это как повезёт.у трейдера в среднем открыто 20-30 таких окон. и как определить какая цифра к какому окну привязана?
Кэпчурить можно по-разному. Можно посылать ему WM_PAINT со своим dc, который типа на картинку в памяти указывает. Можно даже попытаться добиться того, чтобы он в результате отрисовал вообще все цифры, а не только те, которые попадают в клиентрект. Не получится - тогда придётся поебаться со скроллерами етс.
В принципе, задача "выдрать у чужой проги текст" сама по себе довольно, хм, загадочная, так что исполнение через жопу её не сильно испортит Разве что в худшем случае процесс кэпчуринга будет сильно зависеть от настроек машины - фонтов, например.
Тогда не мучайся - кэпчури и распознавайНе мучаться, это перехватывать вызовы DrawText, как советовал ДГ выше.
Вот я видел как минимум семь довольно дорогих программных комплексов (>70k$) написанных на Delphi
Причем большинство было из новосиба или ебурга
![](/images/graemlins/smile.gif)
эта система тоже недешевая. просто надо сделать это вручную так как модуль который позволяет это делать средствами системы, стоит денег.
Оставить комментарий
laki
Народ подскажите пожалуйста.Есть вот такое окно стороннего приложения.
Есть hwnd самого окошка и есть hwnd списка. Кто-нибудь может подсказать как можно программно получить эти данные.
заранее спасибо