Выгрузка данных из хитрого окна
Всё, что можно сделать, есть в Spy++
а подробнее? 

Открываешь студию, в меню Tools выбираешь Spy++, нажимаешь кнопку с иконкой бинокля, перетаскиваешь прицел на нужное окно и смотришь параметры.
судя по картинке, Spy не поможет
хотя, возможно, у меня просто мало опыта
Открываешь Spy++, находишь нужный hWnd и смотришь доступные свойства. Часто (но далеко не всегда) тексты представлены как тайтл окошка, и их можно считать или записать с помощью, насколько я помню, SendMessage или PostMessage.
хотя, возможно, у меня просто мало опыта
Открываешь Spy++, находишь нужный hWnd и смотришь доступные свойства. Часто (но далеко не всегда) тексты представлены как тайтл окошка, и их можно считать или записать с помощью, насколько я помню, SendMessage или PostMessage.
Ну судя по картинке это расширенный WC_LISTVIEW со стилем LVS_REPORT + OWN_DRAW.
Ну и соответвенно можно попробовать получать текст через посылку соответсвующих сообщений/макросов как напр. ListView_GetItemText и ListView_GetItemCount.
Хотя это может только для своего LISTVIEW работает или еще че. Надо проверить как-нить на досуге.
Ну и соответвенно можно попробовать получать текст через посылку соответсвующих сообщений/макросов как напр. ListView_GetItemText и ListView_GetItemCount.
Хотя это может только для своего LISTVIEW работает или еще че. Надо проверить как-нить на досуге.
В крайнем случае можно через CreateRemoteThread подгрузить свою dll'ку и сделать это через нее. Могу дать готовый пример программы, осуществляющей внедрение.
Гы-гы, напомнило извращения с форума на www.sources.ru по Delphi в разделе WinAPI - такое чувство там сделать могут что угодно 

посмотрел спаем идут одни WM_USER с какимито магическими цифрами например:
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
свойства окна смотри, а не сообщения
допустим dll injection я сделаю события перехвачу у этого окна как вообще осуществляется проставление этих цифр.
стандартные макросы не подходят это какой-то рукописный лист.
стандартные макросы не подходят это какой-то рукописный лист.
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
раз text пустой, то ничего посоветовать не могу. Это как раз то, что я упомянул выше:
судя по картинке, Spy не поможет
хотя, возможно, у меня просто мало опыта
> стандартные макросы не подходят это какой-то рукописный лист.
Проверил - для окна чужого приложения макросы работают. Для рукописного листа, если он сделан поверх стандартного по идее тоже должно работать. Если же каждая строка это другой тип окна, то надо его определить - в TotalCommander панелька списока файлов например это TMyListBox - у которого элементы это обернутые TEdit судя по всему (то есть текст сдирается обычным посылом WM_GETTEXT).
Проверил - для окна чужого приложения макросы работают. Для рукописного листа, если он сделан поверх стандартного по идее тоже должно работать. Если же каждая строка это другой тип окна, то надо его определить - в TotalCommander панелька списока файлов например это TMyListBox - у которого элементы это обернутые TEdit судя по всему (то есть текст сдирается обычным посылом WM_GETTEXT).
А их можно селектить? Если да, то напиши прогу, которая эмулирует нажатия разных кнопок и тырит цифирки из клипборда =)
LV_GETITEM всё-таки попробуй
такие циферки и распознать недолго, если лень можно и шрифт заменить на самопал легко распознающийся.
пробовал не фига
по виду - похоже на owner draw, соответственно в лоб текст получить не удастся.
обходные решения:
1. распознать
2. перехватить функцию DrawText (или как она там)
3. попробовать заставить его вывести в какой-нибудь метафайл
обходные решения:
1. распознать
2. перехватить функцию DrawText (или как она там)
3. попробовать заставить его вывести в какой-нибудь метафайл
а это не джававское окошко?
нет это не джавовское окошко. прога на плюсах похоже написана.
А по сетке данные отловить не пробовал? =)
они зашифрованы.
Кстати вот тут http://forum.sources.ru/index.php?showtopic=140506 похожая тема
А кому ты сообщение шлешь?
MultiList - у
У него же есть дочерние списки, им надо
чайлдовых окон у него нет.
А на чём это вообще писано? Маза поискать контрол в инете.
написано это какими-то прогерами из сибири
. контрола в инете нет искал. скорее всего это выводиться при помощи DrawText. спай++ показывает что после обновления всех цифр вызывается WM_PAINT.
. контрола в инете нет искал. скорее всего это выводиться при помощи DrawText. спай++ показывает что после обновления всех цифр вызывается WM_PAINT.написано это какими-то прогерами из сибирискорее всего дельфа =)
а не проще из других источников получать котировки? 

это не есть путь истинного программиста Васи 

нет не проще. трейдеры работают только через эту систему.
откуда такой вывод?
очень вероятно. большинство таких поделий что я видел были на дельфе 
по экзешнику не запакованному не так сложно определить чем он собран.
этот контрол что-нить умеет?
ресайзится или сортироватся?
можно конечно прямо в памяти процесс поискать эти цифки и порюхать структуры, но это как повезёт.

по экзешнику не запакованному не так сложно определить чем он собран.
этот контрол что-нить умеет?
ресайзится или сортироватся?
можно конечно прямо в памяти процесс поискать эти цифки и порюхать структуры, но это как повезёт.
большинство таких поделиймного видел?
можно конечно прямо в памяти процесс поискать эти цифки и порюхать структуры, но это как повезёт.у трейдера в среднем открыто 20-30 таких окон. и как определить какая цифра к какому окну привязана?
Тогда не мучайся - кэпчури и распознавай, благо распознавать при фиксированном шрифте - как нефиг делать: определяешь точную позицию каждой цифры, выдираешь прямоугольничек, переводишь в грейскейл и попиксельно суммируешь разницу между яркостью распознаваемой и эталонной картинки. В качестве эталона лучше использовать слегка размазанные цифры.
Кэпчурить можно по-разному. Можно посылать ему WM_PAINT со своим dc, который типа на картинку в памяти указывает. Можно даже попытаться добиться того, чтобы он в результате отрисовал вообще все цифры, а не только те, которые попадают в клиентрект. Не получится - тогда придётся поебаться со скроллерами етс.
В принципе, задача "выдрать у чужой проги текст" сама по себе довольно, хм, загадочная, так что исполнение через жопу её не сильно испортит Разве что в худшем случае процесс кэпчуринга будет сильно зависеть от настроек машины - фонтов, например.
Кэпчурить можно по-разному. Можно посылать ему WM_PAINT со своим dc, который типа на картинку в памяти указывает. Можно даже попытаться добиться того, чтобы он в результате отрисовал вообще все цифры, а не только те, которые попадают в клиентрект. Не получится - тогда придётся поебаться со скроллерами етс.
В принципе, задача "выдрать у чужой проги текст" сама по себе довольно, хм, загадочная, так что исполнение через жопу её не сильно испортит Разве что в худшем случае процесс кэпчуринга будет сильно зависеть от настроек машины - фонтов, например.
Тогда не мучайся - кэпчури и распознавайНе мучаться, это перехватывать вызовы DrawText, как советовал ДГ выше.
Вот я видел как минимум семь довольно дорогих программных комплексов (>70k$) написанных на Delphi
Причем большинство было из новосиба или ебурга
Система межбанковских расчётов центрального/национального банка одной из стран СНГ написана на Delphi. Сейчас меняют на другую, цена >1M$ 

эта система тоже недешевая. просто надо сделать это вручную так как модуль который позволяет это делать средствами системы, стоит денег.
Оставить комментарий
laki
Народ подскажите пожалуйста.Есть вот такое окно стороннего приложения.
Есть hwnd самого окошка и есть hwnd списка. Кто-нибудь может подсказать как можно программно получить эти данные.
заранее спасибо