|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
|
bikovrm |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 10.10.2010 Репутация: нет Всего: нет |
Пожалуйста помогите!!! При получении данных из чужой программы, нужно прочитать данные из контейнера .NET - WindowsForms10.Window.8.app.0.378734a - таблицу dspTestSeqGrid. Уже перепробовал разнообразную реализацию, но пока не нашел решения этой проблемы.
У меня есть стороннее приложение WindowsForms10 (рис 1), и мне нужно получить доступ к данным в виде сетки этого приложения (прочитать) из моего приложения созданного в Delphi. При использовании программы Spy ++ она не видит этих элементов (рис 2). Но программа Ranorex Spy видит все необходимые поля и четает данные (рис 3 и 4). При рекурсивном переборе всех елементов с использованием FindWindow, FindWindowEx, EnumChildWindows и EnumChildFunc дает мне доступ только к главному окну, но не видит содержимое контейнера. h := FindWindow(NIL,'HK1400 EUI/EUP'); if h <> 0 then begin EnumChildWindows(h, @EnumChildFunc, 0); ... function EnumChildFunc(Child: HWND; lParam : Longint) : BOOL; stdcall; var szClass : array[0..63] of Char; s : array[Byte] of Char; begin GetClassName(Child, szClass, SizeOf(szClass)); ... End; Так же на сайте разработчика программы Ranorex Spy нашол код (для их среды програмирования) для получения доступа к таблице: https://www.ranorex.com/blog/element-based-...istcs-controls/
Пожалуйста, помогите получить доступ к таблице (содержащему данные сетки) и навигации по ней. Желательно с реализацией в Delphi. |
|||
|
||||
bems |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
а софтину где скачать? и запустится ли она без железки?
-------------------- Обижено школьников: 8 |
|||
|
||||
bikovrm |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 10.10.2010 Репутация: нет Всего: нет |
без железа запустится, а скачать можно : https://drive.google.com/open?id=1ykLp9maQm...oEBhVtu5tWSEldV
использование в доке |
|||
|
||||
bems |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
вот чтение грида, кнопки я никакие не нажимаю, так что для проверки кода форму сначала нужно привести в правильное состояние вручную
-------------------- Обижено школьников: 8 |
|||
|
||||
bikovrm |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 10.10.2010 Репутация: нет Всего: нет |
это в RAD Studio? Какую версию вы использовали?
|
|||
|
||||
bems |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
10.2
-------------------- Обижено школьников: 8 |
|||
|
||||
bikovrm |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 10.10.2010 Репутация: нет Всего: нет |
Спасибо. Переварил. Очень помогло.
|
|||
|
||||
bikovrm |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 10.10.2010 Репутация: нет Всего: нет |
А с диаграммой разобраться не поможете? Нужно прочитать данные из первой колонки.
Тут вообще не читается поле с данными, они являются частью диаграммы и в свойствах не описываются. И описание компонента TFlowDiagram вообще в нэте нет. На данный момент если не получится, думаю прейдётся искать в памяти и читать из неё. программа, обновление |
|||
|
||||
bems |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
я не вижу тут лёгкого способа вычитать значение. можно было бы попробовать получить поинтер на компонент из HWND диаграмы и прочитать значение из компонента, но тут две проблемы:
1. если при обновлении прогриаммы поменяется структура компонента в памяти, то всё поломается 2. если при обновлении программы изменится версия делфей/билдера или целевая платформа билда, то всё снова поломается -------------------- Обижено школьников: 8 |
|||
|
||||
bikovrm |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 10.10.2010 Репутация: нет Всего: нет |
если поломается при обновлении, не чего страшного, можно будет поправить, главное как туда залезть и прочитать значение из компонента. И обновление не критично можно на него и забить.
обновление в графике происходит с железа, но.. На закладке "расход ctrl+f4" можно самому в ручную менять значение в ячейке "см3:" |
|||
|
||||
bems |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
ну ок, попробую
-------------------- Обижено школьников: 8 |
|||
|
||||
bems |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
как-то так. показывает значения для первой попавшейся диаграммы. это как раз та, которую можно редактировать вручную
-------------------- Обижено школьников: 8 |
|||
|
||||
bikovrm |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 10.10.2010 Репутация: нет Всего: нет |
Спасибо, вы просто ШАМАН.
Я как раз закончил с чтением значения из памяти, но это гораздо лучше. Щас буду разбираться. |
|||
|
||||
bems |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
так и это чтение из памяти. если хочется избавиться от жестко забитого смещения поля в объекте, то можешь попытаться читать InitTable объекта в поисках динамического массива даблов. впрочем он наверное там не один, и номер массива тогда придется захардкодить
-------------------- Обижено школьников: 8 |
|||
|
||||
bems |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
вот еще более короткий вариант не требующий CreateRemoteThread. при сокращении пала смертью храбрых проверка на разрядность целевого процесса, ну и черт с ней
-------------------- Обижено школьников: 8 |
|||
|
||||
bikovrm |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 10.10.2010 Репутация: нет Всего: нет |
Во первых: Спасибо. Вы, ну, ооооочень сильно помогли. Писал на форуме и не надеялся что ктото поможет.
Во вторых, хотел узнать как я могу вас отблагодарить? И еще .. хочу разобраться полностью в вашем коде. Откуда вы взяли эти смещения, олькой вытягивали?: const ArrFieldOffset = 752; и oldvmtSelfPtr = -88; oldvmtClassName = -56; oldvmtInstanceSize = -52; А вообще, не хотел наглеть, но мне еще нужны данные из компонента TAngularMetter «ТАЙМЕР». Там сейчас значения "--s" и меняются уже при работе железа, отсчитывается время в обратном порядке. Думал заняться этим компонентом как то на досуге. |
|||
|
||||
bems |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
"спасибо" достаточно да, вытаскивал дебагером
эти константы объявлены в System.pas только называются без слова old они иногда изменяются между версиями дельфи и соответственно в моей версии значения уже другие. поэтому я и приписал туда old чтение данных из VMT класса я использую только для уверенности что я попал куда нужно, так что можно и их убрать Добавлено через 9 минут и 4 секунды ок, посмотрю на таймер -------------------- Обижено школьников: 8 |
|||
|
||||
bems |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
проверь на железе
-------------------- Обижено школьников: 8 |
|||
|
||||
bikovrm |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 10.10.2010 Репутация: нет Всего: нет |
Извиняюсь что сразу не ответил, срочно лепил программу в кучу и разбирался в Вашем коде.
У меня просто слов нету, это шедевр, почти универсальный метод чтения подобных компонентов. Компонент TAngularMetter прочитался с первого раза. Порвали как тузик грелку. Я сомневаюсь что смог бы такое написать. Исчезла привязка к версии программы, все на поиске полей компонента. Я так понял что в FindWinControl(TopWnd.Wnd, AngularMetterClassName, 0), 0 - это порядковый номер компонента. Не понял с процедурой ReadBoolean, что она проверяет - FValueClear активность компонента TAngularMetter? Как Вы узнали с каких полей (FVolumeMeasured, FValueClear, FValuePos) читать, делали запись в память по адресу? Посоветуйте пож. что почитать, по поводу структуры (архитектуры) памяти, и вообще о том как Вы находите эти смещения. Потому что мои познания по работе с памятью сводится к отсеву на подобие артмани и разной мелочи. |
|||
|
||||
bems |
|
||||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
среди published-свойств компонента я нашел свойство ValueVar: Variant у которого есть геттер и сеттер. с помощью Иды я заглянул в геттер и увидел что он обращается к двум полям. сначала проверяет равен ли байт нулю и если равен то делает что-то с другим полем, рассматривая его как Double. я записал смещения этих полей и получил имена с помощью процедуры DumpFields. и действительно одно оказалось Boolean а другое Double. Что касается FVolumeMeasured, то я тоже сначала получил смещение в отладчике/дизассемблере, но уже не помню как я на него натолкнулся тогда.
-------------------- Обижено школьников: 8 |
||||
|
|||||
bikovrm |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 10.10.2010 Репутация: нет Всего: нет |
...
Это сообщение отредактировал(а) bikovrm - 22.10.2018, 20:16 |
|||
|
||||
bikovrm |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 10.10.2010 Репутация: нет Всего: нет |
Пожалуйста, не могли бы Вы помочь мне ещё раз.
Нужно прочитать TCategoryButtons, в котором количество строк может быть разным. Уже задолбался в нём ковыряться. прога: В проге нужно "открыть тест-план F9", -> закладка "пользовательский тест-план" и открыть какой нибуть. В компоненте TCategoryButtons появится список тестов который и нужно прочитать. ------------------ Если читать Вашим методом, то можно получить список полей:
Кинув на форму компонент CategoryButtons1, посмотрел что поля нужно добавлять в "Categories -> (TButtonCategories)". В прочитанных выше полях это скорее всего "FButtonCategories : TButtonCategories @ 760". А дальше не могу найти смещение. Пробовал также найти эти поля через "указатели на указатели" (как в артмани или Cheat Engine), но именно в этом объекте некоторые строки через время все равно теряются, меняется смещение. Нашаманьте пож. ещё раз Это сообщение отредактировал(а) bikovrm - 25.10.2018, 10:21 |
|||
|
||||
STest69 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 24.1.2020 Репутация: нет Всего: нет |
||||
|
||||
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |