Midas
|
stranger
|
|
|
|
Рег.: 21.08.2003
|
Сообщений: 18
|
|
Рейтинг: 0
|
|
Экспорт данных из памяти
21.08.2003 18:23
|
|
|
Столкнулся со следующей проблемой. К компьютеру подключен прибор. Его программа производит расчеты и выдает несколько результатов. Результаты выдаются через разные промежутки времени на экран. Для анализа каждого результата необходимо иметь историю динамики изменения его значений, но в программе отсутствует возможность экспорта этих результатов. Вопрос: как наиболее эффективно доставать из памяти (находящиеся по известному адресу) данные для каждого результата и экспортировать их, например, в Excel (постепенно заполняя столбец значений) для последующего анализа? В итоге я хочу сделать real-time экспорт текущих значений в отдельную ячейку для каждого параметра а также получить историю всех значений с указанием времени (в столбец в Excel, плюс, может, в текстовый файл или в БД). Я экспериментировал с программой Memory Doctor, нашел с ее помощью в памяти процесса программы интересующие результаты, они имеют тип double и каждый находится по постоянному адресу. К несчастью, Memory Doctor опять же не имеет экспорта и обновляет у себя результаты только по щелчку на "Обновить". Посоветуйте, пожалуйста, как наиболее эффективно решить данную проблему. Или же может есть такая программа, позволяющая делать real-time (потоковый?) экспорт данных (напр. по DDE или еще как), или же на каком языке и с помощью чего (куда копать надо? чего использовать и как?) можно это осуществить?
|
|
Kai
|
|
|
|
|
Рег.: 25.10.2002
|
Сообщений: 8251
|
|
Рейтинг: 818
|
|
Re: Экспорт данных из памяти
[re: Midas]
21.08.2003 18:26
|
|
|
Напиши сам. В winapi есть функции для чтения данных из памяти процесса.
|
|
|
Re: Экспорт данных из памяти
[re: Kai]
21.08.2003 18:31
|
|
|
только проблемы из-за неатомарности считывания будут возникать
|
|
Attila
|
R
|
|
|
|
Рег.: 18.12.2002
|
Сообщений: 16118
|
Из: ...вот именно там.
|
Рейтинг: 3169
|
|
Re: Экспорт данных из памяти
[re: Midas]
21.08.2003 18:58
|
|
|
на экран куда выдается?.. какими функциями?
|
Кр-ть - с.т.! |
|
Kai
|
|
|
|
|
Рег.: 25.10.2002
|
Сообщений: 8251
|
|
Рейтинг: 818
|
|
Re: Экспорт данных из памяти
[re: Attila]
21.08.2003 19:45
|
|
|
Да, можно, конечно, из с экрана считывать, WM_GETTEXT - ом. Только это гораздо медленнее. Если известно смещение в памяти процесса, то проще и быстрее через него. Неатомарность - проблема, да. Но если есть какой-то признак, позволяющий отличить данные n+1 измерения от n-ого, и измерения проводятся не слишком часто... просто читать как можно чаще.
|
|
Attila
|
R
|
|
|
|
Рег.: 18.12.2002
|
Сообщений: 16118
|
Из: ...вот именно там.
|
Рейтинг: 3169
|
|
Re: Экспорт данных из памяти
[re: Kai]
21.08.2003 19:54
|
|
|
Короче, хинт такой: 1. можно сделать хук, тогда не будет геморра с чтением памяти чужого процесса 2. отлавливать прерывание WM_SETTEXT и после него читать память (по прерыванию, после которого поменялось нужное поле, можно узнать HWND нужного контрола). Если поток только один, то проблем с атомарностью не будет.
|
Кр-ть - с.т.! |
|
Midas
|
stranger
|
|
|
|
Рег.: 21.08.2003
|
Сообщений: 18
|
|
Рейтинг: 0
|
|
Re: Экспорт данных из памяти
[re: Attila]
21.08.2003 21:05
|
|
|
Большое спасибо за совет. Может в таком случае имеет смысл использовать Microsoft Detours или Madshi CodeHook? К сожалению, я не очень силен в Си, но если буду знать, что именно и как использовать, то, думаю, разберусь и напишу.
|
|
|
Re: Экспорт данных из памяти
[re: Midas]
21.08.2003 22:30
|
|
|
У Рихтера написано, как можно залезать в чужие процессы. В Excel тоже можно экспортировать, но для этого нужнo COM знать, .NET или VB на крайний случай.
|
|