Поиск:

Ответ в темуСоздание новой темы Создание опроса
> EnumChildWindow() - не находит HWND 
:(
    Опции темы
fridkaratel
Дата 22.10.2007, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 22.10.2007
Где: Error connect to MySQL Da...

Репутация: нет
Всего: нет



Имеется программа стороннего разработчика (ПСР). ПСР использует для обработки данные из файла set.ini. Моя программа (МП) подставляет необходимые данные в этот файл.

Чтобы пользователю было удобно и чтобы не светить ПСР, я решил ее запускать через SW_HIDE, и нажимать TToolButton "Start". После нажатия ПСР выполняет действия и выводит статус выполения (заверщения) задачи на TCGauge. Чтобы как-то отображать статус в МП, я думал получать через, скажем, каждые 2 сек сообщения от TCGauge о статусе выполнения.

И сразу возникли две проблемы:
1. Не могу работать с TToolButton, так как не удается получить Handle.
2. Не могу работать с TCGauge, так как не удается получить Handle.

Пробовал через разные сканеры, но результат тот же - этих контролов не видно. Также не видно и TLabel... но это ладно - мне она не нужна...

Как нажать кнопку и получить статус выполнения?

Доп. информация: ПСР не зажата упаковщиками, не зашифрована, можно спокойно декомпилировать и получить нахвания всех процедур, форм и т.п. вещей.

Как быть?
PM   Вверх
pandrew
Дата 22.10.2007, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 27.3.2006

Репутация: 3
Всего: 3



Цитата(fridkaratel @  22.10.2007,  08:07 Найти цитируемый пост)
И сразу возникли две проблемы:
1. Не могу работать с TToolButton, так как не удается получить Handle.
2. Не могу работать с TCGauge, так как не удается получить Handle.
...Также не видно и TLabel...

TToolButton и TLabel наследуется от TGraphicControl и Handle не имеет по определению.
Полагаю, что и TCGauge также.
PM MAIL   Вверх
fridkaratel
Дата 22.10.2007, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 22.10.2007
Где: Error connect to MySQL Da...

Репутация: нет
Всего: нет



и как же тогда реализовать мне то, что необходимо? :(
PM   Вверх
pandrew
Дата 22.10.2007, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 27.3.2006

Репутация: 3
Всего: 3



1. Придумать другой алгоритм.
2. Обратиться к разработчику ПСР с просьбой добавить необходимую функциональность.
3. Отказаться от данной ПСР.
4. ... smile)
PM MAIL   Вверх
fridkaratel
Дата 22.10.2007, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 22.10.2007
Где: Error connect to MySQL Da...

Репутация: нет
Всего: нет



я эту тему уже обсудал здесь... 
http://forum.codenet.ru/showthread.php?t=42524

но толку это не принесло...

можно почитать и предложить свои версии о том, что дальше делать...
PM   Вверх
pandrew
Дата 22.10.2007, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 27.3.2006

Репутация: 3
Всего: 3



Вы пытаетесь управлять чужим софтом, который для этого не предназначен. Можно полностью имитировать действия юзера: позиционирование курсора, клики на кнопках и т.д. Для считывания показаний Gauge можно делать скриншоты и анализировать картинку, хоть через персептроны.
Однако, самый дешевый способ - обратиться к разработчику ПСР с просьбой о доработке, например добавить реализацию интерфейса COM.
Либо реализовать всю функциональность заново.
PM MAIL   Вверх
fridkaratel
Дата 22.10.2007, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 22.10.2007
Где: Error connect to MySQL Da...

Репутация: нет
Всего: нет



я думал про подключаемую dll... но толку то нет - как получить значение TCGauge? кнопка TToolButton - фиг с ней, а вот как получить статус?

Была еще такая идея - на примере ArtMoney - искать данные в памяти процесса... скорей всего, данные о прогрессе имеют постоянный адрес, так как смысла делать его динамическим нет...

Итак, какие варианты?
PM   Вверх
dumb
Дата 22.10.2007, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 32
Всего: 158



Цитата(fridkaratel @  22.10.2007,  14:20 Найти цитируемый пост)
Итак, какие варианты? 
учи олбанский - либо китайский, либо ассемблер... smile
PM MAIL   Вверх
fridkaratel
  Дата 22.10.2007, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 22.10.2007
Где: Error connect to MySQL Da...

Репутация: нет
Всего: нет



короче, как я понял - самы надежный и лучший выход из ситуации - на асме встроить доп. функционал в программу... блин, капец... :(
PM   Вверх
586
Дата 22.10.2007, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



Цитата(fridkaratel @  22.10.2007,  14:20 Найти цитируемый пост)
я думал про подключаемую dll... 

ПСР написана на Delphi или Builder'e? Если на Builder'e, с помощью tdump посмотри таблицу экспорта exe-шника ПСР.
Цитата
Exports from Project1.exe
  5 exported name(s), 5 export addresse(s).  Ordinal base is 1.
  Sorted by Name:
    RVA      Ord. Hint Name
    -------- ---- ---- ----
    00001EF4    3 0000 __linkproc__ Unit1::Finalize
    00001EE4    2 0001 __linkproc__ Unit1::Initialize
    000575D8    5 0002 _Form1
    00001295    1 0003 __GetExceptDLLinfo
    00056098    4 0004 ___CPPdebugHook

и в DLL можно сделать такой трюк:
Код
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TForm *f=*(TForm**)GetProcAddress(GetModuleHandle(NULL), "_Form1");
  if (f) {
    TLabel *l=(TLabel*)f->FindComponent("Label1");  // найти можно любой компонент
    if(l) l->Caption="Hello world";
    else MessageBoxA(NULL, "Label1 is not accessible", 0, 16);
  }
  else MessageBoxA(NULL, "Form is not accessible", 0, 16);
}

PM   Вверх
fridkaratel
Дата 22.10.2007, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 22.10.2007
Где: Error connect to MySQL Da...

Репутация: нет
Всего: нет



программа написана на Borland C++ Builder 6.

586, то, что ты предложил уже можно пробовать реализовывать? или еще подождать? smile
PM   Вверх
586
Дата 22.10.2007, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



Цитата(fridkaratel @  22.10.2007,  17:18 Найти цитируемый пост)
что ты предложил уже можно пробовать реализовывать? или еще подождать

Посмотри таблицу экспорта того приложения, или сюда выложи. Может там и нет ничего...
PM   Вверх
fridkaratel
Дата 22.10.2007, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 22.10.2007
Где: Error connect to MySQL Da...

Репутация: нет
Всего: нет



хех... интересная задачка smile

а можно по пунктам, что мне необходимо сделать? ни разу с этим не сталкивался...

PS: но tdump я нашел smile также просмотрел через PEBrowse Pro exe-файлик и как бы нашел там эту таблицу: Sections->.text ... что с ней делать, а может и не с ней?
PM   Вверх
586
Дата 22.10.2007, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



1.   Выполнить -> cmd.exe
1.1 mode con lines=9999       // если не хватает места в консоли
2.   tdump C:\programs\app.exe
3.   В самом низу будут выписаны ресурсы, выше - таблица экспорта (см. код выше)

Цитата(fridkaratel @  22.10.2007,  18:43 Найти цитируемый пост)
нашел там эту таблицу: Sections->.text 

это таблица секций, а не экспорта
PM   Вверх
dumb
Дата 22.10.2007, 18:33 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 32
Всего: 158



или просто
Код
tdump -ee proga.exe
 smile 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1036 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.