StringGrid

Тема в разделе "WASM.RESEARCH", создана пользователем k3internal, 16 май 2007.

  1. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    Приветствую народ!

    Есть вопросик. Есть прога, у которой StringGrid обыкновенный, написана на 5й дельфе. Вопрос, как мне слить все данные из этого грида(со всех столбцов и всех колонок), не подключаясь к проге, точнее если не влазить в её адресное пространство ? Подскажите плиз, если кто с этим сталкивался.
     
  2. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    StringGrid хранит строки в собственной внутренней структуре и просто отрисовывает их в DC, как и TLabel. Поэтому "слить" их, не подключаясь к проге, видимо не получится. Да и с подключением не все так просто, т.к. строки TStringGrid хранятся в заумной структуре, построенной на sparse array-ях
     
  3. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    k3internal
    Нужно подпачить в экзешнике некоторую Options (goRangeSelect), тогда можно будет слить через Clipboard.
    Добавлено
    Вру, через Clipboard так просто не получится.
     
  4. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    crypto
    И просто и не просто не получится, т.к. сам по себе TStringGrid копирование в клипборд не поддерживает
    Единственная зацепка - это goRangeSelect + goEditing, т.е. если текст в ячейках можно редактировать, то соответственно есть возможность одними сообщениями последовательно активизировать ячейки, переводить их в режим редактирования и "сливать" текст из TInplaceEditor. Но мороки тут будет наверное больше, чем открыть процесс, добраться до самого грида и прочитать строки из памяти
     
  5. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    leo
    Мне кажется может прокатить внедрение своей процедуры, считывающей ячейки таблицы и сохраняющей их в файл.
    Сама процедура считывания совсем примитивна, нужно посмотреть, как она выглядит в Дельфях после компиляции, сложного в ней ничего нет - чтение полей класса, не более, ассемблерного кода будет немного. Позаимствовать указатель на класс тоже вроде не представляется сложным. В программе наверняка отыщется вызов функций работы с файлами. А дальше лепим все вместе, находим свободное место, навешиваем на некое событие и вперед...
     
  6. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    crypto
    Всё бы это хорошо, но при этом есть одно условие, которое мне поставили - память процесса можно только читать, никаких инжектов. Кроме того, я уже надумал идти именно таким путём, найти данный объект с гридом, ведь его хэндл мы всегда сможем получить, и далее в памяти отыскать строки и залить их себе. Исходники grids.pas я посмотрел. Всё что касается посыла сообщения гриду и прочее так же недопустимо.
     
  7. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    k3internal
    В любом случае тебе поможет создание в Дельфи процедурки чтения строк и ее "перевод" в ассемблер.