I have two programs, just forms with buttons. One program on the button calls the exe file of another program and makes it a child window. It is impossible to send a button click (which lies on the form of the second program) after opening.
procedure TForm1.Button1Click(Sender: TObject); var hw:hwnd; FormRgn:HRGN; wnd:THandle; begin ShellExecute(Handle, 'open','D:\12\12 \Win32\Debug\Web.exe',nil,nil,SW_SHOWMINNOACTIVE); sleep(100); hw:=FindWindow(nil,'Web'); //Π½Π°Ρ
ΠΎΠ΄ΠΈΠΌ Ρ
Π΅Π½Π΄Π΅Π» Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Windows.SetParent(hw,Handle); //Π΄Π΅Π»Π°Π΅ΠΌ Π΅Π³ΠΎ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΌ ΠΎΠΊΠ½ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ MoveWindow(hw,0,0,ClientWidth,ClientHeight,true); //ΡΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ Π² ΠΏΠΎΠ·ΠΈΡΠΈΡ 0 0 FormRgn:=CreateRectRgn(7,30,Width-200,Height-100); //ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΊΡΡ ΠΎΠ±Π»Π°ΡΡΡ ΠΎΡΡΠ°Π²ΠΈΠΌ Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ SetWindowRgn(hw, FormRgn, TRUE); //ΠΎΠ±ΡΠ΅Π·Π°Π΅ΠΌ Π²ΡΠ΅ Π»ΠΈΡΠ½Π΅Π΅ wnd:=FindWindow(nil,'Web'); // ΠΈΡΠ΅ΠΌ ΠΎΠΊΠ½ΠΎ ΠΏΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡ wnd:=FindWindowEx(wnd,0,nil,'Web'); // ΠΈΡΠ΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ ΠΏΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡ wnd:=FindWindowEx(wnd,0,nil,'start'); // ΠΈΡΠ΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ ΠΏΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡ SendMessage(wnd,WM_LBUTTONDOWN,0,0); // ΠΆΠΌΠ΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ SendMEssage(wnd,WM_LBUTTONUP,0,0); //ΠΎΡΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ end;