Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];

Вниз

Можно ли динаически создать форму в чужом приложении?   Найти похожие ветки 

 
Denis ©   (2005-07-22 11:40) [0]

Приветствую всех!
Из своей программы мне нужно запускать другое приложение и открывать в нем нужную форму в зависимости от передаваемых в командной строке параметров.
Проблема в том, что все формы в стороннем приложении создаются динамически и в момент запуска еще не существуют. Подскажите, можно ли их создать из другого приложения, если известно имя класса и имя окна? Если можно,то как?


 
dmitry501 ©   (2005-07-22 11:44) [1]

Анализировать paramstr() и открывать нужные окна.


 
Denis ©   (2005-07-22 11:46) [2]

CreateWindow(ClassName, WindowName: PChar; Style: Longint; X, Y, Width, Height: Integer; WndParent: HWnd; Menu: HMenu; Instance: THandle; Param: Pointer): HWnd;

Оно?


 
Denis ©   (2005-07-22 11:54) [3]

>Анализировать paramstr() и открывать нужные окна.
ты вопрос читал?


 
Alexander Panov ©   (2005-07-22 12:27) [4]

Denis ©   (22.07.05 11:40)

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


 
alpet ©   (2005-07-22 12:58) [5]

Сомнительно. Это вообще то реализуемое дело, но довольно сложно - создание формы реализуется например с помощью метода Application.CreateForm. Чтобы его вызывать, придется работать "изнутри" процесса, что скорее всего потребует внедрения кода.
Так что проще подождать, пока это сторонее приложение само создаст нужные формы, и отобразить требуемую.


 
Digitman ©   (2005-07-22 13:03) [6]


> Можно ли динаически создать форму в чужом приложении


можно.
но вряд ли нужно.


 
Denis ©   (2005-07-22 13:15) [7]

Похоже никак не обойтись без измененния кода стороннего приложения...
Тогда здесь, видимо, 2 выхода - либо разбирать параметры в ParamStr
либо замещать оконную функцию.

Спасибо!


 
Digitman ©   (2005-07-22 13:30) [8]


> Похоже никак не обойтись без измененния кода стороннего
> приложения


не надо его менять. ни к чему совершенно.


> 2 выхода - либо разбирать параметры в ParamStr
> либо замещать оконную функцию.


не два.

есть и третий, старый и провереный как мир :

- установив хук (практически - любого вида) внедряешь в целевой процесс свою ДЛЛ
- при иниц-ции твоя внедренная ДЛЛ перехватывает любой из АПИ-вызовов, заведомо осуществляемых чужим процессом в осн.трэде
- в обработчике перехвата создаешь и визуализируешь все что тебе надо : хоть  форму, хоть любой VCL-контрол


 
Denis ©   (2005-07-25 14:46) [9]

2 Digitman ©  
Можно поподробнее? Я наваял длл с хуком WH_CALLWNDPROC, но "начинить" ее толком не смог. Прошу помощи...
Вот это "творение":

library Hook;
uses Windows, SysUtils;

var
CurrentHook :HHook;
FmClass     :PChar;
ThredH      :HWND;

function GlobalHook(code: integer; wParam: integer; lParam:integer): longword; stdcall;
var
WndH:HWND;
begin
 if code< 0
 then
  begin
    result:=CallNextHookEx(CurrentHook,code,wParam,lparam);
    Exit;
  end;
   WndH := FindWindow(FmClass,nil);
   if WndH<>0
   then
     ShowWindow(WndH,SW_SHOW)
   else
     begin
              WndH:=CreateWindow(
              FmClass,
              nil,
              WS_MAXIMIZE,
              0,
              0,
              800,
              600,
              ThredH,
              HInstance,
              0,
              nil);
              ShowWindow(WndH,SW_SHOW);
     end;  
   CallNextHookEx(CurrentHook,code,wParam,lparam);
   result:=0;
end;
procedure SetupHook(IDTHREAD:HWND;FmClassName:PChar); stdcall; export;
begin
 CurrentHook:=SetWindowsHookEx(WH_CALLWNDPROC, @GlobalHook,HInstance, IDThread);
 FmClass:=FmClassName;
 ThredH:=IDTHREAD;
end;


 
Digitman ©   (2005-07-25 17:06) [10]


>  "начинить" ее толком не смог


не надо никого "начинять"
установка глоб.хука нужно только для внедрения хук-ДЛЛ в чужое АП


 
Digitman ©   (2005-07-25 17:39) [11]

э-э-э ... пардон, я, вероятно, недопонял вопрос ..

речь идет о "чужой" форме или о своей ?


 
Denis ©   (2005-07-26 08:43) [12]

2 Digitman © [11]
Речь идет о чужом приложение и о его же форме. В его АП нужно создать и открыть эту форму, но из моего приложения.


 
alpet ©   (2005-07-26 09:07) [13]

Denis ©   (26.07.05 08:43) [12]
Это сложно, и в целом не относится к WinAPI. Тебе по сути придется это "чужое" приложение реверсировать (дизассемблировать), чтобы получить доступ к конструкторам объектов его форм (в смысле узнать их адреса). При этом создание форм должно проводиться нетривиальным способом - синхронно с основным потоком "чужого" приложения, тут без внедрения кода (или DLL) просто не обойтись.
Поэтому лучший выход - дождаться таки, когда все формы будут созданы самим приложением, и показать предпочитаемую из них (ShowWindow). Да и спровоцировать приложение на создание форм будет  наверняка полегче, чем создавать их с помощью описанного метода.


 
Digitman ©   (2005-07-26 15:44) [14]


> Denis ©   (26.07.05 08:43) [12]


в общем  случае задача нерешаема.
о частных случаях же нет никакой инф-ции.


 
ANB ©   (2005-07-26 17:42) [15]


> Denis ©   (26.07.05 08:43) [12]
- без правки чужого приложения тут не обойтись. А если править - тут уже куча возможностей установить связь между ними, придумать протокольчик и исполнять в чужом приложении все переданные команды.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.012 c
14-1125058488
red_imp
2005-08-26 16:14
2005.09.18
Географическре положение


1-1124806114
iskatel
2005-08-23 18:08
2005.09.18
сканирование каталога и подкаталогов


14-1125036868
Phoniex
2005-08-26 10:14
2005.09.18
Дата-кабель для Сименс А62


3-1123074767
FireMan_Alexey
2005-08-03 17:12
2005.09.18
Не подскажите как можно программно установить INTERBASE


1-1125170037
dDan
2005-08-27 23:13
2005.09.18
Цепи Маркова





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский