Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Внедрить контрол на чужое окно [D7, WinXP]


Страницы:   1 2

Cobalt ©   (2008-07-25 11:09:00) 

Ситуация: есть готовая программа (Д7), чужая, разработчик недоступен.
Необходимо её "немножко дополнить".
Программа - одна форма с полями ввода, по этим полям формирует 4 Doc-файла.

Переписывать её совершенно не хочется, поэтому хочу внедриьтся и добавить на форму кнопку "Печатать доп. документы", считав значения в полях ввода (нужно примерно треть от всех полей формы).

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

Кто лучше в теме - подтвердите или пните в нужном направлении.


Leonid Troyanovsky   (2008-07-25 16:17:00) [21]


> Cobalt   (25.07.08 16:04) [15]

> моя функция, которая будет считывать текст с контролов и
> открывать Ворд.

Вот упрямец. Ворд и есть то приложение, которое ты
собрался писать. Тебе лишь осталось написать макрос,
который вытащит текст из злосчастного приложения.
И не надо никаких других приложений и хуков.

--
Regards, LVT.


Leonid Troyanovsky   (2008-07-25 16:12:00) [22]


> Cobalt   (25.07.08 16:00) [14]

> не видна :(

Какой нах TButton - CreateWindowEx.
Говорят тебе - добавь пункт в системное меню, а  в хуке WH_CALLWNDPROC* обрабатывай свой WM_SYSCOMMAND.

--
Regards, LVT.


Сергей М.   (2008-07-25 16:08:00) [23]


> WordDM


Этот объект в чьемАП ?
Думай головой)...


Cobalt   (2008-07-25 16:04:00) [24]

Кажется, меня не все понимают.
мне не надо изменятьсуществующий функционал.
мне надо дополнить.
еще одна кнопка;
моя функция, которая будет считывать текст с контролов и открывать Ворд.
при загрузке ДЛЛ в АП процесса, там же будет и весь код ейный, обработчиков и прочей фигни.вот только не знаю, при загрузке ДЛЛ с формой, происходит ли инициализация Application и прочей инфраструктуры?


Cobalt   (2008-07-25 16:00:00) [25]

что-то не внедряется кнопка в чужое АП :(
не видна :(
procedure AddHoc();
 begin
    LoadLibrary('hook_dll1.dll');
    //MessageBox(0,'111','',0);
    WordDM:=TWordDM.Create(NIL);
    MainFormWnd:=FindWindowEx(0,0,'TForm1','Form1');
    Button:=TButton.CreateParented(MainFormWnd);
    Button.Name:='MyPrint';
    Button.Caption:='ПТС и Страховка';
    Button.Top:=0;
    Button.Left:=0;
    Button.Width:= 121;
    Button.Height := 25;
    Button.Visible:=True;
    Button.OnClick:=WordDM.ButtonClick;
    //MessageBox(0,'222','',0);
 end;


Причем, если после этого дела попытаться прочитать Button.ParentWindow, то происходит AV.


Сергей М.   (2008-07-25 15:52:00) [26]


> Leonid Troyanovsky ©   (25.07.08 13:17) [9]


Я к тому что "чужое" приложение понятия не имеет, что делать с этим неожиданно свалившимся на нее "счастьем" в виде невесть откуда взявшихся в ее хозяйстве контролов.
Хук это будет или ручной инжект - не суть как важно.
Важно что без этого полноценная прикладная функциональность этих контролов невозможна.


Anatoly Podgoretsky   (2008-07-25 13:32:00) [27]

> Cobalt  (25.07.2008 12:32:07)  [7]

Ну и что, у вас же разные адресные пространства и ничего про внутреннею реализацию неизвестно.


Leonid Troyanovsky   (2008-07-25 13:27:00) [28]


> Cobalt   (25.07.08 11:59) [5]

> поля не tedit/memo.

А какая разница, если getwindowtext годится.

> и зависить от этих документов не хочется - лучше работать
> с первичкой.

Я говорил о документе, который сделан специально для печати
доп. документов. Макрос считает значения нужных полей
путем  getwindowtext и подготовит документ(ы) для печати.

--
Regards, LVT.


Leonid Troyanovsky   (2008-07-25 13:19:00) [29]


> Cobalt   (25.07.08 12:32) [7]

> Дык, я сам напишу обработчик, для СВОЕЙ кнопки.

Зачем кнопка? Добавь пункт, скажем, в системное меню
и обрабатывай свой WM_SYSCOMMAND.

--
Regards, LVT.


Leonid Troyanovsky   (2008-07-25 13:17:00) [30]


> Сергей М. ©   (25.07.08 12:56) [8]

> Мало написать, его следует еще и внедрить в ВАП процесса-
> "жертвы")

Если зацеплен первичный поток, то хуковая процедура работает
в его контексте.

--
Regards, LVT.


Сергей М.   (2008-07-25 12:56:00) [31]


> я сам напишу обработчик, для СВОЕЙ кнопки


Мало написать, его следует еще и внедритьв ВАП процесса-"жертвы")


Cobalt   (2008-07-25 12:32:00) [32]

Дык, я сам напишу обработчик, для СВОЕЙ кнопки.


Медвежонок Пятачок   (2008-07-25 12:12:00) [33]

Что я хочу - программка, запускает исходную (чужую), через хук внедряет в неё длл-ку  (уже сделал), добавляет контрол на форму и оставляет эту программу работать.

И чего?
Оригинальная программа ничего не знает про твой внедренный контрол.
Точнее алгоритм формирования дока ничего про него не знает.


Cobalt   (2008-07-25 11:59:00) [34]

2 Leonid Troyanovsky ©   (25.07.08 11:27) [2]
Догнал :)
поля не tedit/memo.
и зависить от этих документов не хочется - лучше работать с первичкой.


Cobalt   (2008-07-25 11:58:00) [35]

Поясню еще раз:
контролов на форме сторонней программы - около 70-ти штук.
и кнопка, по которой она открывает 4 док-файла, где заменяет условные слова (типа ном_дог$ или дата$)  на введенные значения.

Макросы посему я не вижу куда применить :(
это не "поля", а просто замена (видно прямо, как текст заменяется если комп загружен в это время)

Что я хочу - программка, запускает исходную (чужую), через хук внедряет в неё длл-ку  (уже сделал), добавляет контрол на форму и оставляет эту программу работать.

А по обработчику кнопки уже я буду считывать поля (getwindowstext), и открывать свои 3 документа, и заменять текст.


Медвежонок Пятачок   (2008-07-25 11:27:00) [36]

Начнешь внедрять новую процедуру формирования док файла?
И что получится в остатке?
Чужой exe в роли формы ввода данных и своя процедура обработки?


Leonid Troyanovsky   (2008-07-25 11:27:00) [37]


> Cobalt   (25.07.08 11:09)  

> Переписывать её совершенно не хочется, поэтому хочу внедриьтся
> и добавить на форму кнопку "Печатать доп. документы", считав
> значения в полях ввода (нужно примерно треть от всех полей
> формы).

Если поля есть TEdit/Memo, то никуда внедряться и не следует.
Напиши в Word макрос, который найдет требуемые поля,
получит из них текст и вставит в печатаемый документ.

--
Regards, LVT.


Медвежонок Пятачок   (2008-07-25 11:25:00) [38]

Ну внедришь. А дальше что?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо