Получение данных из TDBGrid - C++ WinAPI

 
0
 
C++
ava
Boltina | 27.12.2016, 09:12
Есть стороннее приложение в нём в TDBGrid выводятся данные. Могу ли я с помощью winapi своим приложение получить эти данные? Сейчас получилось получить окно этого приложения. И посылать некоторые сообщения самому DBGrid'у.
Куда дальше копать, есть ли возможность получить данные? Какие варианты есть?
Kommentare (8)
ava
миг | 27.12.2016, 10:25 #
Возможно существует ***.dll , которая может предоставить доступ к данным. 
ava
mega | 27.12.2016, 10:53 #
TDBGrid - есть в Delphi такой компонент. Если речь о нем, то будет довольно муторно получить его данные.
Здесь нужен тулсет для работы с объектами Delphi в памяти.
Проще наверное будет использовать не C++, а Delphi,
причем, желательно той же версии, на которой написано исходное приложение.
ava
Boltina | 27.12.2016, 12:29 #
Цитата (GremlinProg @ 27.12.2016,  10:53)
TDBGrid - есть в Delphi такой компонент. Если речь о нем, то будет довольно муторно получить его данные.

Здесь нужен тулсет для работы с объектами Delphi в памяти.

Проще наверное будет использовать не C++, а Delphi,

причем, желательно той же версии, на которой написано исходное приложение.

Очень похоже на Delphi. Возможность использовать Delphi вместо С++ есть, с версией проблема но подобрать нужную можно.
Встает вопрос, а в delphi есть возможность получить доступ к TDBGrid сторонней программы? В какую сторону там смотреть?
Или использовать другой случай - влезать в память относящейся к этой программе?
ava
mega | 27.12.2016, 13:31 #
Цитата (Boltina @  27.12.2016,  14:29 findReferencedText)
Или использовать другой случай - влезать в память относящейся к этой программе? 

да, придется лезти в память чужого процесса, если TDBGrid не использует стандартные компоненты.
Это надо исходники посмотреть TDBGrid.

Насколько помню, такие компоненты даже если используют стандартные компоненты,
то работают с ними в режиме CUSTOM_DRAW, т.е. непосредственно строки хранят в своей памяти, а рисуют их через свои обработчики.
Либо имеют такой режим (virtual list/source как-то так называется).
ava
миг | 27.12.2016, 13:59 #
А не проще определить какие dll файлы были установлены с программой? Часто разработчики зашивают в dll специальные Api функции позволяющие сторонней программе работать с данными их программы.
ava
mega | 27.12.2016, 15:06 #
Цитата (миг @  27.12.2016,  15:59 findReferencedText)
А не проще определить какие dll файлы были установлены с программой? Часто разработчики зашивают в dll специальные Api функции позволяющие сторонней программе работать с данными их программы. 

конечно проще,
если есть API для приложения, лучше воспользоваться им и не заморачиваться
ava
Boltina | 27.12.2016, 16:27 #
Цитата (миг @ 27.12.2016,  13:59)
А не проще определить какие dll файлы были установлены с программой? Часто разработчики зашивают в dll специальные Api функции позволяющие сторонней программе работать с данными их программы.

обязательно посмотрю, если найду наверняка появятся вопросы: о результате напишу
ava
mega | 28.12.2016, 07:37 #
Цитата (Boltina @  27.12.2016,  18:27 findReferencedText)
А как понять что нет возможности работать именно с компонентом и с его datasource (при его наличии) 

У меня нет исходников под рукой. Посмотрите в CreateParams, какой класс окна создается для контрола в TDBGrid или его предках (в TMemo, например - это класс EDIT)
Если ни какого, то смотрите, какие сообщения обрабатывает этот компонент. Вполне возможно, что можно получить необходимую Вам информацию через них (это API компонента).
В Delphi хорошо развито общение между компонентами через такие внутренние сообщения.

И только если ни чего из этого не помогает - можно пробовать получить данные.
Для начала - в одном адресном пространстве (в одном процессе).
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
  mega   миг   Boltina
advanced
Absenden