Приветствую народ! Есть вопросик. Есть прога, у которой StringGrid обыкновенный, написана на 5й дельфе. Вопрос, как мне слить все данные из этого грида(со всех столбцов и всех колонок), не подключаясь к проге, точнее если не влазить в её адресное пространство ? Подскажите плиз, если кто с этим сталкивался.
StringGrid хранит строки в собственной внутренней структуре и просто отрисовывает их в DC, как и TLabel. Поэтому "слить" их, не подключаясь к проге, видимо не получится. Да и с подключением не все так просто, т.к. строки TStringGrid хранятся в заумной структуре, построенной на sparse array-ях
k3internal Нужно подпачить в экзешнике некоторую Options (goRangeSelect), тогда можно будет слить через Clipboard. Добавлено Вру, через Clipboard так просто не получится.
crypto И просто и не просто не получится, т.к. сам по себе TStringGrid копирование в клипборд не поддерживает Единственная зацепка - это goRangeSelect + goEditing, т.е. если текст в ячейках можно редактировать, то соответственно есть возможность одними сообщениями последовательно активизировать ячейки, переводить их в режим редактирования и "сливать" текст из TInplaceEditor. Но мороки тут будет наверное больше, чем открыть процесс, добраться до самого грида и прочитать строки из памяти
leo Мне кажется может прокатить внедрение своей процедуры, считывающей ячейки таблицы и сохраняющей их в файл. Сама процедура считывания совсем примитивна, нужно посмотреть, как она выглядит в Дельфях после компиляции, сложного в ней ничего нет - чтение полей класса, не более, ассемблерного кода будет немного. Позаимствовать указатель на класс тоже вроде не представляется сложным. В программе наверняка отыщется вызов функций работы с файлами. А дальше лепим все вместе, находим свободное место, навешиваем на некое событие и вперед...
crypto Всё бы это хорошо, но при этом есть одно условие, которое мне поставили - память процесса можно только читать, никаких инжектов. Кроме того, я уже надумал идти именно таким путём, найти данный объект с гридом, ведь его хэндл мы всегда сможем получить, и далее в памяти отыскать строки и залить их себе. Исходники grids.pas я посмотрел. Всё что касается посыла сообщения гриду и прочее так же недопустимо.
k3internal В любом случае тебе поможет создание в Дельфи процедурки чтения строк и ее "перевод" в ассемблер.